PDOStatement::bindParam

PHP-stuurprogramma downloaden

Bindt een parameter aan een benoemde of vraagteken-placeholder in de SQL-instructie.

Syntax

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

Parameters

$ parameter: Een (gemengde) parameter-identificatie. Voor een statement met benoemde placeholders, gebruik een parameternaam (:name). Voor een voorbereide uitspraak met de vraagtekensyntaxis is het de 1-gebaseerde index van de parameter.

&$variabele: De (gemengde) naam van de PHP-variabele om te binden aan de SQL-instructieparameter.

$ data_type: Een optionele (integer) PDO::P ARAM_* constante. Standaard is PDO::P ARAM_STR.

$ lengte: Een optionele (gehele getal) lengte van het datatype. Je kunt PDO::SQLSRV_PARAM_OUT_DEFAULT_SIZE specificeren om de standaardgrootte aan te geven wanneer je PDO::P ARAM_INT of PDO::P ARAM_BOOL in $data_type gebruikt.

$ driver_options: De optionele (gemengde) driver-specifieke opties. Je zou bijvoorbeeld PDO::SQLSRV_ENCODING_UTF8 kunnen specificeren om de kolom aan een variabele te binden als een string gecodeerd in UTF-8.

Retourwaarde

WAAR wat betreft succes, anders ONWAAR.

Remarks

Wanneer je nulldata bindt aan serverkolommen van het type varbinary, binary, of varbinary(max), moet je binaire codering (PDO:::SQLSRV_ENCODING_BINARY) specificeren met de $driver_options. Voor meer informatie over coderingsconstanten, zie Constanten.

Ondersteuning voor PDO werd toegevoegd in versie 2.0 van de Microsoft Drivers for PHP for SQL Server.

Parametervoorbeeld

Dit codevoorbeeld laat zien dat nadat $contact aan de parameter is gebonden, het wijzigen van de waarde inderdaad de waarde die in de query is doorgegeven, verandert.

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

Voorbeeld van outputparameter

Dit codevoorbeeld laat zien hoe je toegang krijgt tot een outputparameter.

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

Wanneer een outputparameter wordt gekoppeld aan een bigint-type, en de waarde buiten het bereik van een geheel getal valt, kan het gebruik van PDO::P ARAM_INT met PDO::SQLSRV_PARAM_OUT_DEFAULT_SIZE resulteren in een "waarde buiten bereik"-uitzondering. Gebruik daarom in plaats daarvan de standaard PDO::P ARAM_STR en geef de grootte van de resulterende string, die maximaal 21 is. Het is het maximale aantal cijfers, inclusief het negatieve teken, van een bigintwaarde.

Invoer/Uitvoervoorbeeld

Dit codevoorbeeld laat zien hoe je een input/outputparameter gebruikt.

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

Het wordt aanbevolen om strings als invoer te gebruiken bij het binden van waarden aan een decimale of numerieke kolom om precisie en nauwkeurigheid te waarborgen, aangezien PHP beperkte precisie heeft voor drijvendekommagetallen. Hetzelfde geldt voor bigintkolommen, vooral wanneer de waarden buiten het bereik van een geheel getal liggen.

Voorbeeld van decimale invoer

Dit codevoorbeeld laat zien hoe een decimale waarde als invoerparameter wordt gebind.

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