(PHP 5, PHP 7, PECL OCI8 >= 1.1.0)
oci_parse — Подготавливает запрос к выполнению
$connection
, string $sql_text
)
Подготавливает sql_text
к выполнению,
используя соединение connection
и
возвращает идентификатор выражения, который может быть далее использован
функциямиoci_bind_by_name(),oci_execute()
и другими.
Идентификаторы выражений могут быть освобождены функцией
oci_free_statement() или установкой переменной в
NULL
.
connection
Идентификатор соединения Oracle, полученный из функций oci_connect(), oci_pconnect() или oci_new_connect().
sql_text
Запрос 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_text
. Единственный способ проверить правильность SQL или PL/SQL-запросаsql_text
- это выполнить его.