db2_prepare

(PECL ibm_db2 >= 1.0.0)

db2_prepareПодготавливает SQL-запрос к выполнению

Описание

db2_prepare(resource $connection, string $statement, array $options = []): resource|false

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);
}
}
?>

Смотрите также

  • db2_bind_param() - Связывает переменную PHP с параметром SQL-выражения
  • db2_execute() - Выполняет подготовленный SQL-запрос
  • db2_stmt_error() - Возвращает строку, содержащую SQLSTATE, возвращённую SQL-оператором
  • db2_stmt_errormsg() - Возвращает строку, содержащую последнее сообщение об ошибке SQL-выражения

add a note

User Contributed Notes 3 notes

up
0
agr dot valayam at gmail dot com
7 years ago
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]
up
0
NormInNorman
14 years ago
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.
up
-2
ndt.db2 at google mail
17 years ago
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
To Top