PDOStatement::bindParam

PHP-illesztőprogram letöltése

Paramétert köt egy nevelt vagy kérdőjel helyjelzőhöz az SQL utasításban.

Syntax

  
bool PDOStatement::bindParam($parameter, &$variable[, $data_type[, $length[, $driver_options]]]);  

Paraméterek

$ paraméter: Egy (vegyes paraméterazonosító). Egy elnevezett helykitöltőt használó utasításhoz használj egy paraméternevet (:name). Egy kérdőjel szintaxissal előkészített állítás esetén ez a paraméter 1-es indexe.

&$változó: A PHP változó (vegyes neve) az SQL utasításparaméterhez kötözéshez.

$ data_type: Egy opcionális (egész szám) PDO::P ARAM_* állandó. Az alapértelmezett PDO::P ARAM_STR.

$ hosszúság: Az adattípus opcionális (egész szám) hossza. Megadhatod a PDO::SQLSRV_PARAM_OUT_DEFAULT_SIZE alapértelmezett méretet a PDO::P ARAM_INT vagy PDO::P ARAM_BOOL használata esetén a data_type dollárban.

$ driver_options: Az opcionális (vegyes vezető-specifikus) opciók. Például megadhatod a PDO::SQLSRV_ENCODING_UTF8-t, hogy az oszlopot egy változóhoz kötsd egy UTF-8-ban kódolt stringként.

Visszaadott érték

Igaz a sikerről, egyébként HAMIS.

Remarks

Amikor null adatokat kötsz szerveroszlopokhoz, amelyek varbináris, bináris vagy varbináris (max) típusúak, akkor a $driver_options segítségével kell megadni a bináris kódolást (PDO::SQLSRV_ENCODING_BINARY). További információért a konstansok kódolásáról lásd: Konstansok.

A PDO támogatását a Microsoft Drivers for PHP for SQL Server 2.0-s verziójában adták hozzá.

Paraméter példa

Ez a kódminta azt mutatja, hogy miután $contact a paraméterhez van kötve, az érték megváltoztatása valóban megváltoztatja a lekérdezésben átadott értéket.

<?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";  
}  
?>  

Kimeneti paraméter példa

Ez a kódminta megmutatja, hogyan lehet elérni egy kimeneti paramétert.

<?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;  
?>  

Note

Amikor egy kimeneti paramétert bigint típushoz kötve, ha az érték kiesik egy egész érték tartományán kívül, a PDO::P ARAM_INT és a PDO::SQLSRV_PARAM_OUT_DEFAULT_SIZE használata "érték tartományon kívül" kivételt eredményezhet. Ezért használd az alapértelmezett PDO::P ARAM_STR formátumot, és add meg a kapott string méretét, ami legfeljebb 21. Ez a maximális számjegy, beleértve a negatív jelet is, bármely bigint érték esetében.

Bemenet/kimenet példa

Ez a kódminta bemutatja, hogyan lehet bemeneti/kimeneti paramétert használni.

<?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  
?>  

Note

Ajánlott a láncszálakat bemenetként használni, amikor értékeket kötünk tizedes vagy numerikus oszlophoz , hogy biztosítsuk a pontosságot és a pontosságot, mivel a PHP korlátozott pontossággal rendelkezik a lebegőpontos számok esetében. Ugyanez igaz a bigint oszlopokra is, különösen, ha az értékek nem esnek egy egész szám tartományán.

Tizedes bemeneti példa

Ez a kódminta megmutatja, hogyan lehet egy tizedes értéket bemeneti paraméterként kötni.

<?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();