(PECL ibm_db2 >= 1.0.0)
db2_bind_param — Vincula uma variável PHP a um parâmetro de instrução SQL
$stmt,$parameter_number,$variable_name,$parameter_type = DB2_PARAM_IN,$data_type = 0,$precision = -1,$scale = 0Vincula uma variável PHP a um parâmetro de instrução SQL em um recurso de instrução retornado por db2_prepare(). Esta função fornece mais controle sobre o tipo de parâmetro, tipo de dados, precisão e escala para o parâmetro do que simplesmente passar a variável como parte do array de entrada opcional para db2_execute().
stmtparameter_numbervariable_nameparameter_number.
parameter_typeDB2_PARAM_IN),
um parâmetro de saída (DB2_PARAM_OUT) ou como um
parâmetro que aceita entrada e retorna saída
(DB2_PARAM_INOUT). Para evitar sobrecarga de memória, pode-se
também especificar DB2_PARAM_FILE para vincular a variável PHP
ao nome de um arquivo que contém dados de objeto grande (BLOB, CLOB ou
DBCLOB).
data_typeDB2_BINARY,
DB2_CHAR, DB2_DOUBLE ou
DB2_LONG.
precisionscale
Exemplo #1 Vinculando variáveis PHP a uma instrução preparada
A instrução SQL no exemplo a seguir usa dois parâmetros de entrada na
cláusula WHERE. Chamamos db2_bind_param() para vincular duas
variáveis PHP aos parâmetros SQL correspondentes. Observe que as variáveis PHP
não precisam ser declaradas ou atribuídas antes da chamada a
db2_bind_param(); no exemplo,
$lower_limit recebe um valor antes da chamada a
db2_bind_param(), mas $upper_limit
recebe um valor após a chamada a
db2_bind_param(). As variáveis devem ser vinculadas e, para
parâmetros que aceitam entrada, devem ter qualquer valor atribuído, antes de chamar
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);
// É possível declarar a variável antes de chamar 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);
// Também é possível declarar a variável após chamar 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";
}
}
?>O exemplo acima produzirá:
Pook, cat, 3.2 Rickety Ride, goat, 9.7 Peaches, dog, 12.3
Exemplo #2 Chamando procedimentos armazenados com parâmetros IN e OUT
O procedimento armazenado match_animal no exemplo a seguir aceita três parâmetros diferentes:
TRUE se um
animal no banco de dados corresponder a ele
<?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 dos parâmetros vinculados _antes_ de CALL:\n";
print " 1: {$name} 2: {$second_name} 3: {$weight}\n\n";
if (db2_execute($stmt)) {
print "Valores dos parâmetros vinculados _after_ CALL:\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";
}
}
?>O exemplo acima produzirá:
Valores dos parâmetros vinculados _antes_ de CALL: 1: Peaches 2: Rickety Ride 3: 0 Valores dos parâmetros vinculados _depois_ de CALL: 1: Peaches 2: TRUE 3: 22 Resultados: Peaches, dog, 12.3 Pook, cat, 3.2 Rickety Ride, goat, 9.7
Exemplo #3 Inserindo um objeto binário grande (BLOB) diretamente de um arquivo
Os dados para objetos grandes são normalmente armazenados em arquivos, como documentos XML ou arquivos de áudio. Em vez de ler um arquivo inteiro em uma variável PHP e, em seguida, vincular essa variável PHP a uma instrução SQL, é possível evitar sobrecarga de memória vinculando o arquivo diretamente ao parâmetro de entrada da instrução SQL. O exemplo a seguir demonstra como vincular um arquivo diretamente a uma coluna 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);
?>