(PECL ibm_db2 >= 1.0.0)
db2_bind_param — Vincula una variable PHP a un parámetro de una sentencia SQL
$stmt
, int $parameter-number
, string $variable-name
[, int $parameter-type
[, int $data-type
= 0
[, int $precision
= -1
[, int $scale
= 0
]]]] ) : boolVincula una variabel PHP a una sentencia SQL de un recurso devuelto por db2_prepare(). Esta función proporciona más control sobre el tipo de parámetro, tipo de dato, procesión, y escala del parámetro que cuando se pasa la variabel como parte del array de entrada opcional en db2_execute().
stmt
Sentencia preparada devuelta por db2_prepare().
parameter-number
Especifica la posición del parámetro en la sentencia preparada, utilizando 1 como primera posición.
variable-name
String con el nombre de la variabel PHP que se vinculará
al parámetro especificado por parameter-number
.
parameter-type
Constante que especifica si la variable PHP debe vincularse al parámetro SQL como un parámetro de entrada (DB2_PARAM_IN), de salida (DB2_PARAM_OUT), o como un parámetro que acepta entrada y salida (DB2_PARAM_INOUT). Para evitar fugas de memoria, puede especificarse DB2_PARAM_FILE para vincular la variable PHP al nombre de un fichero que contiene objetos de gran tamaño (BLOB, CLOB, o DBCLOB).
data-type
Constante que especifica el tipo de dato SQL de la variable PHP que se vincula: de entre DB2_BINARY, DB2_CHAR, DB2_DOUBLE, o DB2_LONG.
precision
Especifica la precisión con la que se debe vincular a la base de datos. Este parámetro se puede utilizar también para consultar valores de salida XML de procedimientos almacenados. Un valor no negativo especifica el tamaño máximo de datos XML que se consultarán de la base de datos. Si este parámetro no se utiliza, se asumirá por omisión 1MB para consultar el valor de salida XML del procedimiento almacenado.
scale
Especifica la escala de la variable que se vinculará a la base de datos.
Devuelve TRUE
en caso de éxito o FALSE
en caso de error.
Ejemplo #1 Vinculando variables PHP a sentencias preparadas
La sentencia SQL del siguiente ejemplo utiliza dos parámetros de entrada en la cláusula WHERE. Invocamos db2_bind_param() para vincular dos variables PHP a los correspondientes parámetros SQL. Debe tenerse en cuenta que no es necesario que se hayan declarado o asignado las variables PHP antes de llamar a db2_bind_param(); en el ejemplo, se asigna un valor a $lower_limit antes de llamar a db2_bind_param(), a diferencia de $upper_limit, donde el valor se asigna tras llamar a db2_bind_param(). Se deben vincular las variables y, para parámetros que acepten entradas, debe asignarse el valor antes de llamar a parameters that accept input, must have any value assigned, before calling db2_execute().
<?php
$sql = 'SELECT name, breed, weight FROM animals
WHERE weight > ? AND weight < ?';
$conn = db2_connect($database, $user, $password);
$stmt = db2_prepare($conn, $sql);
// Podemos declarar la variable antes de llamar a db2_bind_param()
$lower_limit = 1;
db2_bind_param($stmt, 1, "lower_limit", DB2_PARAM_IN);
db2_bind_param($stmt, 2, "upper_limit", DB2_PARAM_IN);
// Podemos declarar la variable tras llamar a db2_bind_param()
$upper_limit = 15.0;
if (db2_execute($stmt)) {
while ($row = db2_fetch_array($stmt)) {
print "{$row[0]}, {$row[1]}, {$row[2]}\n";
}
}
?>
El resultado del ejemplo sería:
Pook, cat, 3.2 Rickety Ride, goat, 9.7 Peaches, dog, 12.3
Ejemplo #2 Llamada a procedimientos almacenados con parámetros de Entrada y Salida
El procedimiento almacenado match_animal del siguiente ejemplo acepta tres parámetros:
un parámetro (IN) de entrada que acepta el nombre del primer animal como entrada
un parámetro (INOUT) de entrada-salida que acepta el nombre del segundo animal como entrada y devuelve el string TRUE si coincidiera algún animal de la base de datos
un parámetro (OUT) de salida que devuelve la suma del peso de los dos animales identificados
<?php
$sql = 'CALL match_animal(?, ?, ?)';
$conn = db2_connect($database, $user, $password);
$stmt = db2_prepare($conn, $sql);
$name = "Peaches";
$second_name = "Rickety Ride";
$weight = 0;
db2_bind_param($stmt, 1, "name", DB2_PARAM_IN);
db2_bind_param($stmt, 2, "second_name", DB2_PARAM_INOUT);
db2_bind_param($stmt, 3, "weight", DB2_PARAM_OUT);
print "Valores de los parámetros vinculados _antes_ de la llamada:\n";
print " 1: {$name} 2: {$second_name} 3: {$weight}\n\n";
if (db2_execute($stmt)) {
print "Valores de los parámetros vinculados _tras_ la llamada:\n";
print " 1: {$name} 2: {$second_name} 3: {$weight}\n\n";
print "Resultados:\n";
while ($row = db2_fetch_array($stmt)) {
print " {$row[0]}, {$row[1]}, {$row[2]}\n";
}
}
?>
El resultado del ejemplo sería:
Valores de los parámetros vinculados _antes_ de la llamada: 1: Peaches 2: Rickety Ride 3: 0 Valores de los parámetros vinculados _tras_ la llamada: 1: Peaches 2: TRUE 3: 22 Resultados: Peaches, dog, 12.3 Pook, cat, 3.2 Rickety Ride, goat, 9.7
Ejemplo #3 Insertando un objeto extenso binario (BLOB) directamente desde un fichero
Los datos de objetos extensos se suelen almacenar en ficheros, como por ejemplo documentos XML o ficheros de audio. En lugar de guardar el fichero completo en una variable PHP, para después vincular ésta a una sentencia SQL, se puede evitar esta sobrecarga de memoria vinculando directamente el fichero al parámetro de entrada de la sentencia SQL. El siguiente ejemplo demuestra cómo vincular directamente un fichero a una columna BLOB.
<?php
$stmt = db2_prepare($conn, "INSERT INTO animal_pictures(picture) VALUES (?)");
$picture = "/opt/albums/spook/grooming.jpg";
$rc = db2_bind_param($stmt, 1, "picture", DB2_PARAM_FILE);
$rc = db2_execute($stmt);
?>