(PHP 5, PHP 7, PHP 8, PECL OCI8 >= 1.1.0)
oci_parse — Подготавливает запрос к выполнению
Функция подготавливает sql
-запрос к выполнению
через соединение connection
и возвращает идентификатор запроса, который передают
в oci_bind_by_name(), oci_execute()
и другие функции.
Идентификаторы запросов освобождают функцией
oci_free_statement() или установкой для переменной
значения null
.
connection
Идентификатор соединения Oracle, который получили из функций oci_connect(), oci_pconnect() или oci_new_connect().
sql
SQL- или PL/SQL-запрос.
SQL-запросы не должны заканчиваться точкой с запятой (";"). PL/SQL-запросы должны заканчиваться точкой с запятой (";").
Функция возвращает дескриптор запроса в случае успешного выполнения или false
,
если возникла ошибка.
Пример #1 Пример использования функции oci_parse() с SQL-запросами
<?php
$conn = oci_connect('hr', 'welcome', 'localhost/XE');
// Парсим запрос. Обратите внимание на отсутствие точки запятой в конце SQL-запроса
$stid = oci_parse($conn, 'SELECT * FROM employees');
oci_execute($stid);
echo "<table border='1'>\n";
while ($row = oci_fetch_array($stid, OCI_ASSOC + OCI_RETURN_NULLS)) {
echo "<tr>\n";
foreach ($row as $item) {
echo " <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : "") . "</td>\n";
}
echo "</tr>\n";
}
echo "</table>\n";
?>
Пример #2 Пример использования функции oci_parse() с PL/SQL-запросами
<?php
/*
Перед запуском PHP-скрипта, создайте хранимую процедуру
в SQL*Plus или SQL Developer:
CREATE OR REPLACE PROCEDURE myproc(p1 IN NUMBER, p2 OUT NUMBER) AS
BEGIN
p2 := p1 * 2;
END;
*/
$conn = oci_connect('hr', 'welcome', 'localhost/XE');
if (!$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
$p1 = 8;
// При парсинге PL/SQL-запросов требуется наличие точки с запятой в конце строки
$stid = oci_parse($conn, 'begin myproc(:p1, :p2); end;');
oci_bind_by_name($stid, ':p1', $p1);
oci_bind_by_name($stid, ':p2', $p2, 40);
oci_execute($stid);
print "$p2\n"; // prints 16
oci_free_statement($stid);
oci_close($conn);
?>
Замечание:
Функция не проверяет синтаксис запроса
sql
. Единственный способ проверить правильность SQL- или PL/SQL-запросаsql
— выполнить запрос.