Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Как определить тип запроса в PHP OCI? / 8 сообщений из 8, страница 1 из 1
11.06.2014, 14:47
    #38667662
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить тип запроса в PHP OCI?
Работаю с СУБД Oracle.
Для работы с БД использую функцию-обертку, которая выполняет при необходимости oci_connect, выбирает SQL-запрос, выполняет с ним oci_parse, если у запроса есть параметры, выполняет для них oci_bind_by_name, затем выполняет oci_execute и наконец получает данные oci_fetch_array.
Но если запрос не возвращает данных (например alter session), то при выполнении oci_fetch_array в логах выдается ошибка о том, что не были привязаны параметры или переменные.
Как можно определить, возвращает ли запрос данные (select) или нет и в последнем случае не выполнять oci_fetch_array ?
________________________
Мы смотрим с оптимизмом...
...в оптический прицел.
...
Рейтинг: 0 / 0
11.06.2014, 14:52
    #38667671
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить тип запроса в PHP OCI?
is_bool
...
Рейтинг: 0 / 0
11.06.2014, 15:10
    #38667719
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить тип запроса в PHP OCI?
А причем тут is_bool?
oci_execute всегда возвращает bool.
oci_fetch_array возвращает false при отсутствии данных, но в лог сообщение об ошибке при этом выдается.
Мне же нужно вообще не выполнять oci_fetch_array для не select-запросов.

Пока что я использую oci_statement_type (сравниваю с SELECT).
В моей задаче работает, но это частное решение, т.к. данные могут возвращать и процедуры.
Хотелось бы решения общего.
...
Рейтинг: 0 / 0
11.06.2014, 15:27
    #38667752
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить тип запроса в PHP OCI?
ну видимо если в тексте запроса нет слова SELECT, то и запрос не SELECT, логично жеж
...
Рейтинг: 0 / 0
11.06.2014, 15:42
    #38667782
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить тип запроса в PHP OCI?
Alibek B.А причем тут is_bool?
oci_execute всегда возвращает bool.
oci_fetch_array возвращает false при отсутствии данных, но в лог сообщение об ошибке при этом выдается.
Мне же нужно вообще не выполнять oci_fetch_array для не select-запросов.

Пока что я использую oci_statement_type (сравниваю с SELECT).
В моей задаче работает, но это частное решение, т.к. данные могут возвращать и процедуры.
Хотелось бы решения общего.

общее решение
экзекьют вернул тру, значит запрос удался, если ветч арей вернул фолс(а ваще по идее там должно быть поле типо роу_каунт, сколько строк вернуло) - значит запрос не возвращал данные. ещо там должно быть поле типо аффектид роус, если были удаление, изменение данных.

а по харошему, ты ж делал запрос..ты ведь знаешь что ты делал.

а если ещо доку внимательней почитать,

короче поискал для тебя

тыц
полагаю вернёт пустое значение если запрос ничего не возвращал

НАВОДЯЩИЙ ВОПРОС
как отличить оператор селект или вызов процедуры которая чтото там вернула ??? не парся скл строку? думаеться мне никак..технически никак, структура ответа сервера идентична

а как отличить выборку с нулевым результатом от не выборки???

твой вопрос вцелом похож на - как отличить, почему сервер требует авторизацию, - логин и пароль не верен, или просто пароль стал новый? - а никак, протоколом ХТТП это не предусмотренно, в обоих случаях получишь 401 ответ.
...
Рейтинг: 0 / 0
11.06.2014, 17:48
    #38667971
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить тип запроса в PHP OCI?
Hettну видимо если в тексте запроса нет слова SELECT, то и запрос не SELECT, логично жеж
Нет, не логично.
Данные может получать хранимая процедура.
Запрос может начинаться не со слова SELECT (а например со слова WITH).
SQL-запрос вообще может состоять из нескольких запросов, разделенных точкой с запятой.
Поэтому ориентироваться на текст запроса нельзя, нужно опрашивать сервер.

alex564657498765453 , я хочу свести ошибки в логах к минимуму.
Использование oci_fetch_array никаких сбоев не вызывает, только запись в логе.
Хочу не вызывать oci_fetch_array в тех случаях, когда этого не требуется, чтобы в логах этих записей не было.

Проверки oci_statement_type недостаточно, т.к. CALL и BEGIN могут и возвращать записи, и не возвращать.
...
Рейтинг: 0 / 0
11.06.2014, 18:04
    #38667992
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить тип запроса в PHP OCI?
alex564657498765453а как отличить выборку с нулевым результатом от не выборки???
В Perl это можно сделать по возвращаемому значению execute, для успешных запросов, возвращающих набор данных, execute всегда возвращает true, даже если выборка пустая. В OCI я такой возможности пока не нашел.
...
Рейтинг: 0 / 0
11.06.2014, 20:26
    #38668128
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить тип запроса в PHP OCI?
Alibek B.alex564657498765453а как отличить выборку с нулевым результатом от не выборки???
В Perl это можно сделать по возвращаемому значению execute, для успешных запросов, возвращающих набор данных, execute всегда возвращает true, даже если выборка пустая. В OCI я такой возможности пока не нашел.

и в перле нет возможности подавлять ошибку ??? в пхп собака перед командой подавляет стандартную обработку ошибки(нестандартная - это твоя собсвенная, где ты сможешь увидеть, что эта ошибка возникла, но она подавлена)
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Как определить тип запроса в PHP OCI? / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]