A simple select example.
$pr_stmt = db2_prepare ($this->conn,"select count(*) from note where city=? and year= ?");
db2_execute($pr_stmt,array('test',2016));
$count_res = db2_fetch_array($pr_stmt);
echo "Count =".$count_res[0]
(PECL ibm_db2 >= 1.0.0)
db2_prepare — Подготавливает SQL-запрос к выполнению
db2_prepare() создаёт подготовленный SQL-запрос, который может включать 0
или более маркеров параметров (символов ?
), представляющих входные параметры, параметры вывода
или входные параметры и параметры вывода.
Вы можете передать параметры подготовленному запросу, используя db2_bind_param()
или только для входных значений в виде массива, переданного в db2_execute().
Использование подготовленных запросов в вашем приложении даёт три основных преимущества:
Производительность: при использовании подготовленного запроса, сервер базы данных создаёт оптимизированный план доступа для извлечения данных с помощью этого запроса. Последующее выполнение подготовленного запроса с помощью db2_execute() позволяет операторам повторно использовать этот план доступа и позволяет избежать накладных расходов на динамическое создание нового плана доступа для каждого выполняемого вами запроса.
Безопасность: при использовании подготовленного запроса, вы можете включить маркеры параметров для входных значений. Когда вы выполняете подготовленный запрос с входными значениями для заполнителей, сервер базы данных проверяет каждое входное значение, чтобы убедиться, что тип соответствует определению столбца или определению параметра.
Расширенный функционал: Маркеры параметров не только позволяют передавать входные значения в подготовленные SQL-запросы, они также позволяют извлекать параметры OUT и INOUT из хранимых процедур с помощью db2_bind_param().
connection
Допустимая переменная ресурса подключения к базе данных, возвращаемая функцией db2_connect() или db2_pconnect().
statement
SQL-запрос, необязательно содержащий один или несколько маркеров параметров.
options
Ассоциативный массив, содержащий параметры запроса. Параметры можно использовать для запроса прокручиваемого курсора на серверах баз данных, поддерживающих эту функцию.
Описание допустимых опций запроса смотрите в разделе db2_set_option().
Возвращает ресурс оператора, если SQL-запрос был успешно проанализирован и подготовлен сервером базы данных.
Возвращает false
, если сервер базы данных вернул ошибку.
Вы можете определить, какая ошибка была возвращена, вызвав
db2_stmt_error() или db2_stmt_errormsg().
Пример #1 Подготовка и выполнение SQL-запроса с маркерами параметров
В следующем примере подготавливается запрос INSERT, который принимает четыре маркера параметров, а затем выполняет итерацию по массиву массивов, содержащих входные значения, которые необходимо передать в db2_execute().
<?php
$animals = array(
array(0, 'cat', 'Pook', 3.2),
array(1, 'dog', 'Peaches', 12.3),
array(2, 'horse', 'Smarty', 350.0),
);
$insert = 'INSERT INTO animals (id, breed, name, weight)
VALUES (?, ?, ?, ?)';
$stmt = db2_prepare($conn, $insert);
if ($stmt) {
foreach ($animals as $animal) {
$result = db2_execute($stmt, $animal);
}
}
?>
A simple select example.
$pr_stmt = db2_prepare ($this->conn,"select count(*) from note where city=? and year= ?");
db2_execute($pr_stmt,array('test',2016));
$count_res = db2_fetch_array($pr_stmt);
echo "Count =".$count_res[0]
If you are having problems with scrollable cursors and the prepare statement, I've found that you cant set the scrollable option on the connection. The following code (which tries to get the 2nd record):
<?php
$sql = "SELECT * FROM SCHEMA.TABLENAME";
$options = array('cursor' => DB2_SCROLLABLE);
$conn = db2_connect($database, $user, $password,$options);
$stmt = db2_prepare($conn, $sql);
$result = db2_execute($stmt);
$row = db2_fetch_both($stmt, 2);
$conn = db2_connect($database, $user, $password);
$stmt = db2_prepare($conn, $sql, $options);
$result = db2_execute($stmt);
$row = db2_fetch_both($stmt, 2);
?>
Will result in the following error:
Warning: db2_fetch_both() [function.db2-fetch-both]: Fetch Failure in dbtest.php on line 7
In fact, even if you set the options on both the connection and the prepare your fetch will not work. You must only set that option on the prepare.
if you have the error message : PHP Warning: db2_prepare() [<a href='function.db2-prepare'>function.db2-prepare</a>]: Statement Prepare Failed in (....)
and cannot display the error message using db2_stmt_errormsg() , then check if your database connection handle is (still) valid