Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Binder en parameter till en namngiven eller frågeteckensplatshållare i SQL-satsen.
Syntax
bool PDOStatement::bindParam($parameter, &$variable[, $data_type[, $length[, $driver_options]]]);
Parameters
$ parameter: En (blandad) parameteridentifierare. För ett uttalande som använder namngivna platshållare, använd ett parameternamn (:name). För ett förberetts påstående med frågeteckensyntax är det det 1-baserade indexet för parametern.
&$variabel: Det (blandade) namnet på PHP-variabeln för att binda till SQL-satsparametern.
$ data_type: En valfri (heltals) PDO::P ARAM_* konstant. Standard är PDO::P ARAM_STR.
$ längd: En valfri (heltals) längd av datatypen. Du kan ange PDO::SQLSRV_PARAM_OUT_DEFAULT_SIZE för att ange standardstorleken när du använder PDO::P ARAM_INT eller PDO::P ARAM_BOOL i $data_type.
$ driver_options: De valfria (blandade) drivrutinsspecifika alternativen. Till exempel kan du ange PDO::SQLSRV_ENCODING_UTF8 för att binda kolumnen till en variabel som en sträng kodad i UTF-8.
Returvärde
SANT om framgång, annars FEL.
Remarks
När du binder nolldata till serverkolumner av typen varbinary, binary eller varbinary(max) bör du specificera binär kodning (PDO::SQLSRV_ENCODING_BINARY) med $driver_options. För mer information om kodningskonstanter, se Konstanter.
Stöd för PDO lades till i version 2.0 av Microsoft Drivers för PHP för SQL Server.
Parameterexempel
Detta kodexempel visar att efter att $contact är bunden till parametern, ändrar ett värde det som skickas i frågan.
<?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";
}
?>
Exempel på utgångsparameter
Detta kodexempel visar hur man får tillgång till en utgångsparameter.
<?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
När man binder en utgångsparameter till en biginttyp, om värdet kan hamna utanför intervallet för ett heltal, kan användning av PDO::P ARAM_INT med PDO::SQLSRV_PARAM_OUT_DEFAULT_SIZE resultera i ett undantag för "värde utanför intervallet". Använd därför standard-PDO::P ARAM_STR istället och ange storleken på den resulterande strängen, som är högst 21. Det är det maximala antalet siffror, inklusive det negativa tecknet, för något bigintvärde.
Exempel på in- och utdata
Detta kodexempel visar hur man använder en in-/utmatningsparameter.
<?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
Det rekommenderas att använda strängar som indata när man binder värden till en decimal- eller numerisk kolumn för att säkerställa precision och noggrannhet, eftersom PHP har begränsad precision för flyttalstal. Samma gäller för bigintkolumner, särskilt när värdena ligger utanför intervallet för ett heltal.
Decimalinmatningsexempel
Detta kodexempel visar hur man binder ett decimalt värde som en indataparameter.
<?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();