Начал писать свой компонент и сразу же возникла затыка.... В базе лежит хранимая процедура, которая отдает рэкордсет, мне же нужно в модели вызвать её и обработать ответ, но ничего не получается. Думал работать как с обычным запросом и написал так: $query = 'CALL setLetter(1,2,3,"x");'; $db->setQuery( $query ); $rows = $db->loadObjectList(); На что $db->getErrorMsg(); мне ответил, что: PROCEDURE otbaldi.setLetter can't return a result set in the given context SQL=CALL setLetter(1,2,3,"x"); Я так понимаю нужно вызывать процедуру в каком-то специальном режиме. Памагите люди добрые!
после установки с объекту $db свойсва "query" необходимо еще выполнить этот запрос методом Код (PHP): $db->Query(); . Помоему так!. А в таком случае как сейчас вообще никакого выполнения не происходит!
to Tureckiy Та не, не так. На сколько я понимаю loadObjectList() самостоятельно предварительно выполняет $db->Query(); ибо с обычными запросами такой трюк работет. На всякий пожарный также проверил предлагаемый вами вариант - результат тот же. ( Кто-нибудь получал результаты из хранимой процедуры? отзовитесь плиз!
loadResult - загрузка одного поля. это тут не причем вроде, т.к. моя процедура возвращает набор записей.
чувствую, что прийдётся отказаться от использования классов джумлы, а просто читать её конфу, и самостоятельно подключаться к базе библиотечкой mysqli ... не ожидал такой подставы от жумлы, просто не хочется верить что она не расчитана на такую простую операцию.
Подумал, поискал. http://bugs.php.net/bug.php?id=35203 я так понимаю, что нельзя будет вызывать хранимые процедуры таким образом, либо использовать запросы напрямую.
Не понял про "запросы напрямую" По вашей ссылке как раз и написано, что можно и я раньше так и делал при помощи библиотеки mysqli, просто сейчас хотел воспользоваться подсистемой работы с базой данных самой джумлы, и вот через неё то и возникает проблема. Раз уж я использую джумлу то хотелось бы пользовать функции фреймворка вместо того чтобы лепить свой велик. Ну на нет и суда нет )))
Я не силен в английском, но по ссылке рассматривается проблема вызова хранимой процедуры через mysqli_query, что и дает ошибку. Насколько я понял, что вызов такой процедуры дает два результата. Поэтому надо использовать mysqli_multi_query и mysqli_next_result
Вот тут человек утверждает что хранимые процедуры работают. Только похоже это все выполняется из двух запросов: 1. Выполняет хр.процедуру. которая делает изменения в какой-то таблице 2. Другой запрос после этого выбирает результаты после выполнения хр.процедуры. Типа так: Код (PHP): // call stored procedure which populates the table with the last 20 posts of latest threads $query = 'call get_latest_thread_post'; $database -> setQuery( $query ); $database->query(); //$rows = $database -> loadObjectList(); $query = 'select id, catid, name, userid, subject, time, topic_emoticon from #__fb_latest_thread_post order by time desc limit '.$postings.''; $database -> setQuery( $query ); $rows = $database -> loadObjectList();