(PECL ibm_db2 >= 1.0.0)
db2_bind_param — Asocia una variable PHP a un parámetro de una consulta SQL
$stmt,$parameter_number,$variable_name,$parameter_type = DB2_PARAM_IN,$data_type = 0,$precision = -1,$scale = 0Asocia una variable PHP a un parámetro en la consulta SQL devuelta por db2_prepare(). Esta función permite mayor control sobre los tipos de los parámetros, los tipos de datos, la precisión y la escala para el parámetro que al pasarle simplemente una variable dentro del array de entrada opcional de la función db2_execute().
stmtparameter_numbervariable_nameparameter_number.
parameter_typeDB2_PARAM_IN), como parámetro de salida
(DB2_PARAM_OUT) o como parámetro que acepta
entradas y salidas (DB2_PARAM_INOUT).
Para evitar un exceso de consumo de memoria, también puede especificarse
DB2_PARAM_FILE para asociar la variable PHP al
nombre del archivo que contiene los datos del objeto grande (BLOB, CLOB o
DBCLOB).
data_typeDB2_BINARY, DB2_CHAR,
DB2_DOUBLE o DB2_LONG.
precisionscale
Ejemplo #1 Asociación de variables PHP a una consulta preparada
La consulta SQL en el siguiente ejemplo utiliza dos parámetros de entrada
en la sección WHERE. Se llama a db2_bind_param()
para asociar dos variables que no han sido declaradas o asignadas
antes de la llamada a db2_bind_param(); en este ejemplo,
$lower_limit es asignada antes de ser llamada a
db2_bind_param(), pero $upper_limit
es asignada después de la llamada a db2_bind_param(). Las
variables deben ser asociadas y, para los parámetros que aceptan entradas,
se les debe asignar un valor antes de llamar a db2_execute().
<?php
$sql = 'SELECT nom, race, poids FROM animaux
WHERE poids > ? AND poids < ?';
$conn = db2_connect($database, $user, $password);
$stmt = db2_prepare($conn, $sql);
// Se puede 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);
// También se puede declarar la variable después de 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 ejemplo anterior mostrará:
Pook, chat, 3.2 Rickety Ride, chèvre, 9.7 Peaches, chien, 12.3
Ejemplo #2 Llamada a procedimientos de registro con parámetros IN y OUT
El procedimiento de registro concorde_animal en el siguiente ejemplo acepta tres diferentes parámetros:
TRUE si un
animal en la base de datos coincide con este nombre
<?php
$sql = 'CALL concorde_animal(?, ?, ?)';
$conn = db2_connect($database, $user, $password);
$stmt = db2_prepare($conn, $sql);
$nom = "Peaches";
$second_nom = "Rickety Ride";
$poids = 0;
db2_bind_param($stmt, 1, "nom", DB2_PARAM_IN);
db2_bind_param($stmt, 2, "second_nom", DB2_PARAM_INOUT);
db2_bind_param($stmt, 3, "poids", DB2_PARAM_OUT);
print "Valores de los parámetros _antes_ de CALL :\n";
print " 1: {$nom} 2: {$second_nom} 3: {$poids}\n\n";
if (db2_execute($stmt)) {
print "Valores de los parámetros _después_ de CALL :\n";
print " 1: {$nom} 2: {$second_nom} 3: {$poids}\n\n";
print "Resultados :\n";
while ($row = db2_fetch_array($stmt)) {
print " {$row[0]}, {$row[1]}, {$row[2]}\n";
}
}
?>El ejemplo anterior mostrará:
Valores de los parámetros _antes_ de CALL : 1: Peaches 2: Rickety Ride 3: 0 Valores de los parámetros _después_ de CALL : 1: Peaches 2: TRUE 3: 22 Resultados : Peaches, chien, 12.3 Pook, chat, 3.2 Rickety Ride, chèvre, 9.7
Ejemplo #3 Inserción de un objeto grande binario (BLOB) directamente desde un archivo
Los datos para los objetos grandes normalmente se almacenan en archivos, como documentos XML o archivos de audio. En lugar de leer el archivo completo en una variable de PHP y luego asociar la variable PHP en la consulta SQL, se puede evitar cierto sobrecoste de memoria asociando el archivo directamente al parámetro de entrada de su consulta SQL. El siguiente ejemplo demuestra cómo asociar un archivo directamente en una columna BLOB.
<?php
$stmt = db2_prepare($conn, "INSERT INTO animal_pictures(photo) VALUES (?)");
$picture = "/opt/albums/spook/grooming.jpg";
$rc = db2_bind_param($stmt, 1, "picture", DB2_PARAM_FILE);
$rc = db2_execute($stmt);
?>