(PECL ibm_db2 >= 1.0.0)
db2_bind_param — Связывает переменную PHP с параметром SQL-выражения
$stmt,$parameter_number,$variable_name,$parameter_type = DB2_PARAM_IN,$data_type = 0,$precision = -1,$scale = 0Связывает переменную PHP с параметром SQL-выражения в ресурсе выражения, возвращаемом db2_prepare(). Эта функция даёт больший контроль над типом параметра, типом данных, точностью и масштабом для параметра, чем простая передача переменной как части необязательного входного массива в db2_execute().
stmtparameter_numbervariable_nameparameter_number.
parameter_typeDB2_PARAM_IN),
выходной параметр (DB2_PARAM_OUT) или как параметр,
который принимает ввод и возвращает вывод (DB2_PARAM_INOUT).
Чтобы избежать перегрузки памяти, можно также указать
DB2_PARAM_FILE, чтобы привязать переменную PHP к имени
файла, который содержит данные большого объекта (BLOB, CLOB или DBCLOB).
data_typeDB2_BINARY, DB2_CHAR,
DB2_DOUBLE или DB2_LONG.
precisionscale
Функция возвращает true, если выполнилась успешно, или false, если возникла ошибка.
Пример #1 Привязка переменных PHP к подготовленному выражению
SQL-выражение в данном примере использует два входных параметра в
предложении WHERE. Вызывается db2_bind_param(), чтобы
связать две переменные PHP с соответствующими параметрами SQL. Обратите
внимание, что переменные PHP не нужно объявлять или присваивать перед
вызовом db2_bind_param(); в этом примере
$lower_limit присваивается значение перед вызовом
db2_bind_param(), а $upper_limit
присваивается значение после вызова db2_bind_param().
Перед вызовом db2_execute() переменные должны быть
связаны, а параметрам, принимающим ввод, должно быть присвоено любое
значение.
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);
// Можно объявить переменную перед вызовом 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);
// Также можно объявить переменную после вызова 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";
}
}
?>Результат выполнения приведённого примера:
Pook, cat, 3.2 Rickety Ride, goat, 9.7 Peaches, dog, 12.3
Пример #2 Вызов хранимых процедур с параметрами IN и OUT
Хранимая процедура match_animal в данном примере принимает три разных параметра:
TRUE,
если животное в базе данных совпадает с этим именем
<?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 "Values of bound parameters _before_ CALL:\n";
print " 1: {$name} 2: {$second_name} 3: {$weight}\n\n";
if (db2_execute($stmt)) {
print "Values of bound parameters _after_ CALL:\n";
print " 1: {$name} 2: {$second_name} 3: {$weight}\n\n";
print "Results:\n";
while ($row = db2_fetch_array($stmt)) {
print " {$row[0]}, {$row[1]}, {$row[2]}\n";
}
}
?>Результат выполнения приведённого примера:
Values of bound parameters _before_ CALL: 1: Peaches 2: Rickety Ride 3: 0 Values of bound parameters _after_ CALL: 1: Peaches 2: TRUE 3: 22 Results: Peaches, dog, 12.3 Pook, cat, 3.2 Rickety Ride, goat, 9.7
Пример #3 Вставка большого двоичного объекта (BLOB) напрямую из файла
Данные для больших объектов обычно хранятся в файлах, таких как документы XML или аудиофайлы. Вместо того, чтобы считывать весь файл в переменную PHP и затем связывать эту переменную PHP с SQL-выражением, можно избежать некоторых накладных расходов на память, привязав файл напрямую к входному параметру SQL-выражения. В данном примере показано, как привязать файл напрямую к столбцу 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);
?>