Joomla 1.5 получение ответа хранимой процедуры

Тема в разделе "Создание расширений для Joomla", создана пользователем Bulgakov_A_N, 20.09.2009.

  1. Offline

    Bulgakov_A_N Недавно здесь

    Регистрация:
    20.09.2009
    Сообщения:
    5
    Симпатии:
    0
    Начал писать свой компонент и сразу же возникла затыка.... В базе лежит хранимая процедура, которая отдает рэкордсет, мне же нужно в модели вызвать её и обработать ответ, но ничего не получается. Думал работать как с обычным запросом и написал так:

    $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");

    Я так понимаю нужно вызывать процедуру в каком-то специальном режиме.

    Памагите люди добрые!
     
    Последнее редактирование модератором: 21.09.2009
  2.  
  3. Tureckiy
    Offline

    Tureckiy Недавно здесь => Cпециалист <=

    Регистрация:
    11.04.2009
    Сообщения:
    423
    Симпатии:
    30
    Пол:
    Мужской
    после установки с объекту $db свойсва "query"
    необходимо еще выполнить этот запрос методом
    Код (PHP):
    1. $db->Query();
    . Помоему так!. А в таком случае как сейчас вообще никакого выполнения не происходит!
     
  4. Offline

    Bulgakov_A_N Недавно здесь

    Регистрация:
    20.09.2009
    Сообщения:
    5
    Симпатии:
    0
    to Tureckiy
    Та не, не так. На сколько я понимаю loadObjectList() самостоятельно предварительно выполняет $db->Query(); ибо с обычными запросами такой трюк работет. На всякий пожарный также проверил предлагаемый вами вариант - результат тот же. (

    Кто-нибудь получал результаты из хранимой процедуры? отзовитесь плиз!
     
  5. sectus
    Offline

    sectus Недавно здесь => Cпециалист <=

    Регистрация:
    19.04.2006
    Сообщения:
    1 210
    Симпатии:
    46
    Пол:
    Мужской
    $db->LoadResult() - может как-нибудь так?
     
  6. Offline

    Bulgakov_A_N Недавно здесь

    Регистрация:
    20.09.2009
    Сообщения:
    5
    Симпатии:
    0
    loadResult - загрузка одного поля. это тут не причем вроде, т.к. моя процедура возвращает набор записей.
     
  7. Offline

    Bulgakov_A_N Недавно здесь

    Регистрация:
    20.09.2009
    Сообщения:
    5
    Симпатии:
    0
    чувствую, что прийдётся отказаться от использования классов джумлы, а просто читать её конфу, и самостоятельно подключаться к базе библиотечкой mysqli ... не ожидал такой подставы от жумлы, просто не хочется верить что она не расчитана на такую простую операцию.
     
  8. sectus
    Offline

    sectus Недавно здесь => Cпециалист <=

    Регистрация:
    19.04.2006
    Сообщения:
    1 210
    Симпатии:
    46
    Пол:
    Мужской
    Подумал, поискал.
    http://bugs.php.net/bug.php?id=35203
    я так понимаю, что нельзя будет вызывать хранимые процедуры таким образом, либо использовать запросы напрямую.
     
  9. Offline

    Bulgakov_A_N Недавно здесь

    Регистрация:
    20.09.2009
    Сообщения:
    5
    Симпатии:
    0
    Не понял про "запросы напрямую"
    По вашей ссылке как раз и написано, что можно и я раньше так и делал при помощи библиотеки mysqli, просто сейчас хотел воспользоваться подсистемой работы с базой данных самой джумлы, и вот через неё то и возникает проблема. Раз уж я использую джумлу то хотелось бы пользовать функции фреймворка вместо того чтобы лепить свой велик. Ну на нет и суда нет )))
     
  10. Dead Krolik
    Offline

    Dead Krolik Недавно здесь => Cпециалист <=

    Регистрация:
    13.04.2007
    Сообщения:
    3 685
    Симпатии:
    101
    Пол:
    Мужской
    А как это было "раньше". Тупо последовательность вызовов mysql_*
     
  11. sectus
    Offline

    sectus Недавно здесь => Cпециалист <=

    Регистрация:
    19.04.2006
    Сообщения:
    1 210
    Симпатии:
    46
    Пол:
    Мужской
    Я не силен в английском, но по ссылке рассматривается проблема вызова хранимой процедуры через mysqli_query, что и дает ошибку. Насколько я понял, что вызов такой процедуры дает два результата. Поэтому надо использовать mysqli_multi_query и mysqli_next_result
     
  12. Offline

    OlegKor Недавно здесь

    Регистрация:
    02.03.2009
    Сообщения:
    30
    Симпатии:
    0
    Пол:
    Мужской
    Вот тут человек утверждает что хранимые процедуры работают.

    Только похоже это все выполняется из двух запросов:
    1. Выполняет хр.процедуру. которая делает изменения в какой-то таблице
    2. Другой запрос после этого выбирает результаты после выполнения хр.процедуры.

    Типа так:
    Код (PHP):
    1. // call stored procedure which populates the table with the last 20 posts of latest threads
    2.         $query = 'call get_latest_thread_post';
    3.         $database -> setQuery( $query );
    4.         $database->query();
    5.        
    6.         //$rows = $database -> loadObjectList();
    7.         $query = 'select id, catid, name, userid, subject, time, topic_emoticon
    8. from #__fb_latest_thread_post order by time desc limit '.$postings.'';
    9.         $database -> setQuery( $query );
    10.         $rows = $database -> loadObjectList();
     
    Последнее редактирование: 07.11.2009

Поделиться этой страницей

Загрузка...