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().
Использование подготовленных запросов в вашем приложении даёт три основных преимущества:
connectionstatementoptions
Возвращает ресурс оператора, если 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