Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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();