PDOStatement::bindValue
SQL ステートメントで名前付きまたは疑問符プレースホルダーに値をバインドします。
構文
bool PDOStatement::bindValue($parameter, $value[, $data_type]);
パラメーター
$parameter: (混合) パラメーター識別子。 名前付きプレースホルダーを使用するステートメントの場合、パラメーター名 (:name) を使用します。 疑問符構文を使用する準備されたステートメントの場合、これはパラメーターの 1 から始まるインデックスになります。
$value: パラメーターにバインドする (複合) 値。
$data_type: PDO::PARAM_* 定数で表される省略可能な (整数) データ型。 既定は PDO::PARAM_STR です。
戻り値
成功した場合は TRUE、それ以外の場合は FALSE です。
解説
PDO のサポートは Microsoft SQL Server 用 Drivers for PHPのバージョン 2.0 で追加されました。
パラメーターの例
この例は、$contact の値をバインドした後に、値を変更してもクエリで渡される値が変更されないことを示しています。
<?php
$database = "AdventureWorks";
$server = "(local)";
$conn = new PDO("sqlsrv:server=$server ; Database = $database", "", "");
$contact = "Sales Agent";
$stmt = $conn->prepare("select * from Person.ContactType where name = ?");
$stmt->bindValue(1, $contact);
$contact = "Owner";
$stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
print "$row[Name]\n\n";
}
$stmt = null;
$contact = "Sales Agent";
$stmt = $conn->prepare("select * from Person.ContactType where name = :contact");
$stmt->bindValue(':contact', $contact);
$contact = "Owner";
$stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
print "$row[Name]\n\n";
}
?>
Note
値を 10 進数列または数値列にバインドするときは、有効桁数と精度を保持するために、入力として文字列を使用することをお勧めします。これは、PHP には浮動小数点数の有効桁数に制限があるためです。 値が整数の範囲外にある場合は特に、同じことが bigint 列にも適用されます。
10 進数の入力の例
このコード サンプルでは、入力パラメーターとして 10 進数値をバインドする方法を示しています。
<?php
$database = "Test";
$server = "(local)";
$conn = new PDO("sqlsrv:server=$server ; Database = $database", "", "");
// Assume TestTable exists with a decimal field
$input = 9223372036854.80000;
$stmt = $conn->prepare("INSERT INTO TestTable (DecimalCol) VALUES (?)");
// by default it is PDO::PARAM_STR, rounding of a large input value may
// occur if PDO::PARAM_INT is specified
$stmt->bindValue(1, $input, PDO::PARAM_STR);
$stmt->execute();