Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Не реализована работа с хранимыми процедурами #15

Open
x88 opened this issue Jun 29, 2013 · 12 comments

Comments

@x88
Copy link

x88 commented Jun 29, 2013

Класс не корректно работает с хранимыми процедурами. В частности не реализована очистка нескольких возращаемых результатов, с использованием mysqli_next_result. Так как результаты полностью не очищаются, получаем сообщение Commands out of sync; you can't run this command now.

@colshrapnel
Copy link
Owner

Да, это правда.
Увы, самому мне с возвращающими несколько результатов процедурами работать не приходилось. Не могли бы вы написать код, который нужен будет в данном случае?

@x88
Copy link
Author

x88 commented Jun 29, 2013

    function free($res){
        mysqli_free_result($res);  
            while(mysqli_more_results ($this->conn)){
              mysqli_next_result($this->conn);
              if($_res = mysqli_store_result($this->conn)){
                      mysqli_free_result($_res); 
              }
            }
    }

@x88
Copy link
Author

x88 commented Jun 29, 2013

Модифицировал стандартную функцию free. Это должно решить проблему.

@colshrapnel
Copy link
Owner

Я правильно понимаю, что это только для случая, когда остальные результаты не нужны? И по-хорошему, нужно сделать аналоги mysqli_more_results, mysqli_next_result и mysqli_store_result?
и плюс написать что-нибудь вроде freeAll, в которую поместить этот код?

Тогда можно будет как использовать все результаты, так и очистить их?

@x88
Copy link
Author

x88 commented Jun 29, 2013

Да, SP возвращает вроде 2 результата, сам результат и статусное сообщение для одного возвращаемого значения. Использовать несколько возвращаемых значений дурной тон, но кто то может использовать.

@webninjadk
Copy link

Скачал свежую версию класса. Safemysql: Commands out of sync; you can't run this command now. Как правильно работать с процедурами в классе?

@alekssskirov
Copy link

Есть решение mysqli_more_results, mysqli_next_result и mysqli_store_result?
У меня пустой результат при мультизапросе

@00dev
Copy link
Contributor

00dev commented Sep 5, 2020

@alekssskirov Приведите пример кода, пожалуйста

@alekssskirov
Copy link

Решил так

Так работает

public function query1($query) {
$mysqli = $this->conn;
if ($mysqli->query($query)) {
do {
if ($result = $mysqli->store_result()) {
while ($row = $result->fetch_row())
$ret[] = $row;
$result->free();
}
} while ($mysqli->more_results() && $mysqli->next_result());
}
return @$ret;
}

@00dev
Copy link
Contributor

00dev commented Sep 7, 2020

@alekssskirov Я наверное этот момент пропустил. Разве mysqli::query() возвращает "мультирезультат"? Можете привести пример того, что передается в $query?

@alekssskirov
Copy link

Да ошибся, if ($mysqli->multi_query($query))
Но в маем случаи и query работает :-) , т.к. запросы идут к sphinx для FACET, а sphinx multi отдает и через query()

@00dev
Copy link
Contributor

00dev commented Sep 8, 2020

@alekssskirov Хорошо. Ваш код теперь не вызывает вопросов (но его не мешало бы отформатировать в комментарии). Смущает другое. Как это связано с темой issue? "Топикстартер" не потрудился привести пример неработающего кода с использованием данной библиотеки, вы добавили подроностей, но я опять не вижу кода самой процедуры, при работе с которой есть проблемы

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants