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

Discussion in 'Создание расширений для Joomla' started by Bulgakov_A_N, Sep 20, 2009.

  1. Offline

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

    Joined:
    Sep 20, 2009
    Messages:
    5
    Likes Received:
    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");

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

    Памагите люди добрые!
     
    Last edited by a moderator: Sep 21, 2009
  2.  
  3. Tureckiy
    Offline

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

    Joined:
    Apr 11, 2009
    Messages:
    423
    Likes Received:
    30
    Gender:
    Male
    после установки с объекту $db свойсва "query"
    необходимо еще выполнить этот запрос методом
    Код (PHP):
    1. $db->Query();
    . Помоему так!. А в таком случае как сейчас вообще никакого выполнения не происходит!
     
  4. Offline

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

    Joined:
    Sep 20, 2009
    Messages:
    5
    Likes Received:
    0
    to Tureckiy
    Та не, не так. На сколько я понимаю loadObjectList() самостоятельно предварительно выполняет $db->Query(); ибо с обычными запросами такой трюк работет. На всякий пожарный также проверил предлагаемый вами вариант - результат тот же. (

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

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

    Joined:
    Apr 19, 2006
    Messages:
    1,210
    Likes Received:
    46
    Gender:
    Male
    $db->LoadResult() - может как-нибудь так?
     
  6. Offline

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

    Joined:
    Sep 20, 2009
    Messages:
    5
    Likes Received:
    0
    loadResult - загрузка одного поля. это тут не причем вроде, т.к. моя процедура возвращает набор записей.
     
  7. Offline

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

    Joined:
    Sep 20, 2009
    Messages:
    5
    Likes Received:
    0
    чувствую, что прийдётся отказаться от использования классов джумлы, а просто читать её конфу, и самостоятельно подключаться к базе библиотечкой mysqli ... не ожидал такой подставы от жумлы, просто не хочется верить что она не расчитана на такую простую операцию.
     
  8. sectus
    Offline

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

    Joined:
    Apr 19, 2006
    Messages:
    1,210
    Likes Received:
    46
    Gender:
    Male
    Подумал, поискал.
    http://bugs.php.net/bug.php?id=35203
    я так понимаю, что нельзя будет вызывать хранимые процедуры таким образом, либо использовать запросы напрямую.
     
  9. Offline

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

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

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

    Joined:
    Apr 13, 2007
    Messages:
    3,685
    Likes Received:
    101
    Gender:
    Male
    А как это было "раньше". Тупо последовательность вызовов mysql_*
     
  11. sectus
    Offline

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

    Joined:
    Apr 19, 2006
    Messages:
    1,210
    Likes Received:
    46
    Gender:
    Male
    Я не силен в английском, но по ссылке рассматривается проблема вызова хранимой процедуры через mysqli_query, что и дает ошибку. Насколько я понял, что вызов такой процедуры дает два результата. Поэтому надо использовать mysqli_multi_query и mysqli_next_result
     
  12. Offline

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

    Joined:
    Mar 2, 2009
    Messages:
    30
    Likes Received:
    0
    Gender:
    Male
    Вот тут человек утверждает что хранимые процедуры работают.

    Только похоже это все выполняется из двух запросов:
    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();
     
    Last edited: Nov 7, 2009

Share This Page

Loading...