Compartir a través de


PDOStatement::bindParam

Descargar controlador PHP

Enlaza un parámetro a un marcador de posición con nombre o signo de interrogación en la instrucción SQL.

Sintaxis

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

Parámetros

$parameter: identificador de parámetro (mixto). En una instrucción que use marcadores de posición con nombre, emplee un nombre de parámetro (:name). En una instrucción preparada mediante la sintaxis de signos de interrogación, es el índice basado en 1 del parámetro.

&$variable: el nombre (mixto) de la variable PHP que se va a enlazar al parámetro de instrucción SQL.

$data_type: constante PDO::PARAM_* opcional (entero). El valor predeterminado es PDO::PARAM_STR.

$length: longitud opcional (entero) del tipo de datos. Puede especificar PDO::SQLSRV_PARAM_OUT_DEFAULT_SIZE para indicar el tamaño predeterminado al usar PDO::PARAM_INT o PDO::PARAM_BOOL en $data_type.

$driver_options: las opciones específicas del controlador opcionales (mixto). Por ejemplo, podría especificar PDO::SQLSRV_ENCODING_UTF8 para enlazar la columna a una variable como una cadena codificada en UTF-8.

Valor devuelto

Se devuelve True si la operación se realiza correctamente; de lo contrario, False.

Observaciones

Cuando se enlazan datos null a las columnas de servidor de tipo varbinary, binary o varbinary(max), debe especificar la codificación binaria (PDO::SQLSRV_ENCODING_BINARY) con $driver_options. Para obtener más información sobre la codificación de constantes, vea Constantes.

En la versión 2.0 de los Controladores de Microsoft para PHP para SQL Server, se agregó compatibilidad con PDO.

Ejemplo de parámetro

En este ejemplo de código se muestra que después de que $contact se enlace al parámetro, al cambiar el valor, se modifica el valor transmitido en la consulta.

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

Ejemplo de parámetro de salida

En este ejemplo de código se muestra cómo obtener acceso a un parámetro de salida.

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

Al enlazar un parámetro de salida a un tipo bigint, si el valor sobrepasa el intervalo de un entero, es posible que usar PDO::PARAM_INT con PDO::SQLSRV_PARAM_OUT_DEFAULT_SIZE genere una excepción de "valor fuera del intervalo". Por lo tanto, use PDO::PARAM_STR predeterminado en su lugar y proporcione el tamaño de la cadena resultante, que es como máximo 21. Es el número máximo de dígitos, incluido el signo negativo, de cualquier valor bigint.

Ejemplo de entrada y salida

En este ejemplo de código se muestra cómo utilizar un parámetro de entrada/salida.

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

Se recomienda utilizar cadenas como entradas cuando se vinculen valores a una columna decimal o numérica para garantizar la precisión y la exactitud, ya que PHP tiene una precisión limitada para números de punto flotante. Lo mismo se aplica a las columnas de tipo bigint, especialmente cuando los valores están fuera del intervalo de un entero.

Ejemplo de entrada decimal

Este ejemplo de código muestra cómo enlazar un valor decimal como un parámetro de entrada.

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

Consulte también

Clase PDOStatement

PDO