PDOStatement::bindParam
Mengikat parameter ke tempat penampung bernama atau tanda tanya dalam pernyataan SQL.
Sintaks
bool PDOStatement::bindParam($parameter, &$variable[, $data_type[, $length[, $driver_options]]]);
Parameter
$parameter: Pengidentifikasi parameter (campuran). Untuk pernyataan menggunakan tempat penampung bernama, gunakan nama parameter (:name). Untuk pernyataan yang disiapkan menggunakan sintaks tanda tanya, ini adalah indeks parameter berbasis 1.
&$variable: Nama (campuran) dari variabel PHP untuk diikat ke parameter pernyataan SQL.
$data_type: Konstanta PDO(bilangan bulat) opsional::P ARAM_*. Defaultnya adalah PDO::P ARAM_STR.
$length: Panjang opsional (bilangan bulat) dari jenis data. Anda dapat menentukan PDO::SQLSRV_PARAM_OUT_DEFAULT_SIZE untuk menunjukkan ukuran default saat menggunakan PDO::P ARAM_INT atau PDO::P ARAM_BOOL dalam $data_type.
$driver_options: Opsi khusus driver opsional (campuran). Misalnya, Anda dapat menentukan PDO::SQLSRV_ENCODING_UTF8 untuk mengikat kolom ke variabel sebagai string yang dikodekan dalam UTF-8.
Tampilkan Nilai
TRUE pada keberhasilan, jika tidak FALSE.
Keterangan
Saat mengikat data null ke kolom server jenis varbinary, biner, atau varbinary(max), Anda harus menentukan pengodean biner (PDO::SQLSRV_ENCODING_BINARY) menggunakan $driver_options. Untuk informasi selengkapnya tentang konstanta pengodean, lihat Konstanta.
Dukungan untuk PDO ditambahkan di Driver Microsoft versi 2.0 untuk PHP untuk SQL Server.
Contoh parameter
Sampel kode ini menunjukkan bahwa setelah $contact terikat ke parameter, mengubah nilai memang mengubah nilai yang diteruskan dalam kueri.
<?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->bindParam(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->bindParam(':contact', $contact);
$contact = "Owner";
$stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
print "$row[Name]\n\n";
}
?>
Contoh parameter output
Sampel kode ini menunjukkan cara mengakses parameter output.
<?php
$database = "Test";
$server = "(local)";
$conn = new PDO("sqlsrv:server=$server ; Database = $database", "", "");
$input1 = 'bb';
$stmt = $conn->prepare("select ? = count(*) from Sys.tables");
$stmt->bindParam(1, $input1, PDO::PARAM_STR, 10);
$stmt->execute();
echo $input1;
?>
Catatan
Saat mengikat parameter output ke jenis bigint, jika nilai mungkin berakhir di luar rentang bilangan bulat, menggunakan pengecualian PDO::P ARAM_INT dengan PDO::SQLSRV_PARAM_OUT_DEFAULT_SIZE dapat mengakibatkan pengecualian "nilai di luar rentang". Oleh karena itu, gunakan PDO::P ARAM_STR default sebagai gantinya dan berikan ukuran string yang dihasilkan, yang paling banyak 21. Ini adalah jumlah maksimum digit, termasuk tanda negatif, dari nilai bigint apa pun.
Contoh Input/Output
Sampel kode ini menunjukkan cara menggunakan parameter input/output.
<?php
$database = "AdventureWorks";
$server = "(local)";
$dbh = new PDO("sqlsrv:server=$server ; Database = $database", "", "");
$dbh->query("IF OBJECT_ID('dbo.sp_ReverseString', 'P') IS NOT NULL DROP PROCEDURE dbo.sp_ReverseString");
$dbh->query("CREATE PROCEDURE dbo.sp_ReverseString @String as VARCHAR(2048) OUTPUT as SELECT @String = REVERSE(@String)");
$stmt = $dbh->prepare("EXEC dbo.sp_ReverseString ?");
$string = "123456789";
$stmt->bindParam(1, $string, PDO::PARAM_STR | PDO::PARAM_INPUT_OUTPUT, 2048);
$stmt->execute();
print $string; // Expect 987654321
?>
Catatan
Disarankan untuk menggunakan string sebagai input saat mengikat nilai ke kolom desimal atau numerik untuk memastikan presisi dan akurasi karena PHP memiliki presisi terbatas untuk angka titik float. Hal yang sama berlaku untuk kolom bigint, terutama ketika nilai berada di luar rentang bilangan bulat.
Contoh input desimal
Sampel kode ini menunjukkan cara mengikat nilai desimal sebagai parameter input.
<?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->bindParam(1, $input, PDO::PARAM_STR);
$stmt->execute();