PDOStatement::bindParam

Stáhnout ovladač PHP

Přiřadí parametr k pojmenovanému nebo ottazníkovému zástupci v SQL příkazu.

Syntax

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

Parametry

$parametr: (smíšený) identifikátor parametru. Pro příkaz používající pojmenované zástupce použijte název parametru (:name). Pro připravené tvrzení využívající syntaxi otazníku je to index parametru založený na 1.

&$variable: (smíšený) název proměnné PHP, kterou je třeba navázat na parametr SQL příkazu.

$ data_type: Volitelná (celočíselná) PDO::P ARAM_* konstanta. Výchozí je PDO::P ARAM_STR.

$ délka: Volitelné (celočíselné) délky datového typu. Můžete zadat PDO::SQLSRV_PARAM_OUT_DEFAULT_SIZE pro označení výchozí velikosti při použití PDO::P ARAM_INT nebo PDO::P ARAM_BOOL v $data_type.

$ driver_options: Volitelné (smíšené) specifické pro řidiče. Například můžete specifikovat PDO::SQLSRV_ENCODING_UTF8 tak, aby sloupec byl přiřazen proměnné jako řetězec kódovaný v UTF-8.

Návratová hodnota

PRAVDA v případě úspěchu, jinak NEPRAVDA.

Remarks

Při vázání null dat na serverové sloupce typu varbinary, binary nebo varbinary(max) byste měli specifikovat binární kódování (PDO::SQLSRV_ENCODING_BINARY) pomocí $driver_options. Pro více informací o kódovacích konstantách viz Konstanty.

Podpora PDO byla přidána ve verzi 2.0 Microsoft Drivers for PHP for SQL Server.

Příklad parametru

Tento vzor kódu ukazuje, že po navázání $contact na parametr změna hodnoty skutečně změní hodnotu zadanou v dotazu.

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

Příklad výstupního parametru

Tento vzor kódu ukazuje, jak přistupovat k výstupnímu parametru.

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

Při vázání výstupního parametru na bigint typ, pokud hodnota může skončit mimo rozsah celého čísla, může použití PDO::P ARAM_INT s PDO::SQLSRV_PARAM_OUT_DEFAULT_SIZE vést k výjimce "hodnota mimo rozsah". Proto použijte výchozí PDO::P ARAM_STR a uveďte velikost výsledného řetězce, která je maximálně 21. Je to maximální počet číslic včetně záporného znaménka jakékoli bigintové hodnoty.

Příklad vstup/výstup

Tento vzor kódu ukazuje, jak používat parametr vstup/výstup.

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

Doporučuje se používat řetězce jako vstupy při vázání hodnot na desetinný nebo číselný sloupec , aby byla zajištěna přesnost a přesnost, protože PHP má omezenou přesnost pro čísla s plovoucí desetinnou čárkou. Totéž platí pro sloupce bigint, zejména když hodnoty přesahují rozsah celého čísla.

Příklad desetinného vstupu

Tento vzor kódu ukazuje, jak navázat desetinnou hodnotu jako vstupní parametr.

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