Condividi tramite


PDOStatement::bindParam

Download del driver PHP

Associa un parametro a un segnaposto denominato o punto interrogativo nell'istruzione SQL.

Sintassi

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

Parametri

$parameter: identificatore del parametro (misto). Per un'istruzione che usa segnaposti denominati, usare un nome parametro (:name). Per un'istruzione preparata che usa la sintassi punto interrogativo, è l'indice in base 1 del parametro.

&$variable: nome (misto) della variabile PHP da associare al parametro dell'istruzione SQL.

$data_type: costante (intero) PDO::PARAM_* facoltativa. Il valore predefinito è PDO::PARAM_STR.

$length: lunghezza (intero) facoltativa del tipo di dati. È possibile specificare PDO::SQLSRV_PARAM_OUT_DEFAULT_SIZE per indicare le dimensioni predefinite quando si usa PDO::PARAM_INT o PDO::PARAM_BOOL in $data_type.

$driver_options: opzioni facoltative (miste) specifiche del driver. Ad esempio, è possibile specificare PDO::SQLSRV_ENCODING_UTF8 per associare la colonna a una variabile come stringa codificata in UTF-8.

Valore restituito

TRUE in caso di esito positivo; in caso contrario, FALSE.

Osservazioni:

Quando si associano dati Null alle colonne del server di tipo varbinary, binary o varbinary(max), è consigliabile specificare la codifica binaria (PDO::SQLSRV_ENCODING_BINARY) usando $driver_options. Per altre informazioni sulle costanti di codifica, vedere Costanti.

Il supporto per PDO è stato aggiunto nella versione 2.0 dei driver Microsoft per PHP per SQL Server.

Esempio di parametro

In questo esempio viene illustrato che dopo l'associazione di $contact al parametro, la modifica del valore non modifica il valore passato nella query.

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

Esempio di parametro di output

In questo esempio di codice viene illustrato come accedere a un parametro di output.

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

Nota

Quando si associa un parametro di output a un tipo bigint, se esiste la possibilità che il valore venga escluso dall'intervallo di un Integer, l'uso di PDO::PARAM_INT con PDO::SQLSRV_PARAM_OUT_DEFAULT_SIZE può generare un'eccezione "Valore esterno all'intervallo consentito". Usare invece il valore PDO::PARAM_STR predefinito e specificare le dimensioni della stringa risultante, che sono al massimo pari a 21, ovvero il numero massimo di cifre, incluso il segno meno, di qualsiasi valore bigint.

Esempio di input/output

In questo esempio di codice viene illustrato come usare un parametro di input/output.

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

Nota

È consigliabile usare stringhe come input durante l'associazione di valori a una colonna decimal o numeric per garantire precisione e accuratezza, dato che PHP offre una precisione limitata per i numeri a virgola mobile. Lo stesso vale per le colonne di tipo bigint, soprattutto quando i valori non sono compresi nell'intervallo di un integer.

Esempio di input decimale

Questo esempio di codice mostra come associare un valore decimale come parametro di input.

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

Vedi anche

Classe PDOStatement

PDO