вызов stored procedure в mysql из php
Спасибо за ссылку. В используемой мною процедуре вывод есть результат SELECT'a. Каким образом должен тогда задаваться параметр OUT? Я немножко новичёк в mysql, но не увидел типа данных array.
В оракле это ref cursor/ResultSet соответственно.
Как в мускуле - хз. Возможно просто второй селект который ты вызываешь после call для получения новых значений параметров вернет тебе все нужное.
Как в мускуле - хз. Возможно просто второй селект который ты вызываешь после call для получения новых значений параметров вернет тебе все нужное.
Разобрался уже: есть тип cursor, но работать с ним не так просто. Другой вариант: в процедуре указать параметры OUT по одному на каждое возвращаемое значение.
В общем, проще вставить этот select в тело кода. Тем более, что не уверен насчёт серьёзного увеличения производительности в случае использования хранимых процедур. Кто-нибудь может авторитетно сказать/показать что будет быстрее работать и даст меньшую нагрузку на сервер: select из нескольких таблиц с длинным where-условием вызванный непосредственно из php кода или использование процедуры с тем же селектом?
В общем, проще вставить этот select в тело кода. Тем более, что не уверен насчёт серьёзного увеличения производительности в случае использования хранимых процедур. Кто-нибудь может авторитетно сказать/показать что будет быстрее работать и даст меньшую нагрузку на сервер: select из нескольких таблиц с длинным where-условием вызванный непосредственно из php кода или использование процедуры с тем же селектом?
select из нескольких таблиц с длинным where-условием вызванный непосредственно из php кода или использование процедуры с тем же селектом?должно быть однохуйственно
должно быть однохуйственноесли делать prepare. иначе он будет компилировать толстый запрос при каждом вызове.
Я правильно понял Йорика:
Если делать prepare, то скорость одинакова, если не делать prepare, то при вызове хранимки "он будет компилировать толстый запрос" и работать с процедурой становится медленнее?
Если делать prepare, то скорость одинакова, если не делать prepare, то при вызове хранимки "он будет компилировать толстый запрос" и работать с процедурой становится медленнее?
не правильно.
при первом вызове хранимки она компилится, и потом исползуется уже скомпилированная (иногда перекомпилится, когда надо).
есои ты подготовишь (prepare) пакет, он тоже скомпилируется, как и тело хранимки. после этого ты его можешь использовать так же быстро, как и хранимку, не тратя время на компиляцию. проблема возникнет только если у тебя пакет формируется динамически.
при первом вызове хранимки она компилится, и потом исползуется уже скомпилированная (иногда перекомпилится, когда надо).
есои ты подготовишь (prepare) пакет, он тоже скомпилируется, как и тело хранимки. после этого ты его можешь использовать так же быстро, как и хранимку, не тратя время на компиляцию. проблема возникнет только если у тебя пакет формируется динамически.
$query = "CALL personnel_eng($id)";А "SELECT personnel_eng($id)" не поможет?

Оставить комментарий
Dmitry08
В базе сделана процедура personnel_eng(IN id INT получающая параметр и выполняющая один большой select (для теста при вызове в кодеполучается ответ:
PROCEDURE labwebdb.personnel_eng can't return a result set in the given context
При вызове из консоли mysql получаю ожидаемый результат. Каким образом получить результат выполнения mysql-процедуры в php?