Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте , столкнулся с такой проблемой.
Есть метод, который выполняет функцию и возвращает результат в виде массива
Если метод запускать 1 раз (за все время работы сценария php) все работает нормально,
если вызвать например 2 раза (2 разные процедуры) на втором вызове вылетает ошибка
Commands out of sync; you can't run this command now
Вот собственно код:
mysqli_real_query($this->db_handle,"CALL {$proc}");
$result = mysqli_use_result($this->db_handle);
$rows = array();
if ($result){
while ( $row = mysqli_fetch_assoc($result) ) {
$rows[] = $row;
}
mysqli_free_result($result);
}else{
echo mysqli_error($this->db_handle);
}
return $rows;
Зарание благодарен за вашу помощь.
Неактивен
Есть ощущение, что это вопрос таки по PHP
Вызывается ли mysqli_free_result после первого использования? Все ли resultsetы
Вы вычитываете при обработке процедуры? Что возвращает mysqli_more_results?
Неактивен
проблема в том, что когда я в 1 соединении делаю вызов процедуры а затем пытаюсь сделать любой другой запрос, то вылетает эта ошибка. Это возникает только в том случае, если я сначало вызывал процедуру. Причем при первом вызове процедуры я получаю от нее корректные данные. Поэтому я решил что это проблема зарыта где то в мускуле, мне кажется между вызовами процедур нужно делать какойто вызов команды мускула, возможно вы что-то об этом знаете?
Отредактированно cooler (23.04.2010 16:49:44)
Неактивен
Обработка запроса происходит таким образом
1. Клиент: Выполни процедуру А
2. Сервер: Выполняю... готово
3. Клиент: Отдай результат
4. Сервер: Строка1, Строка2, ...
5. Клиент: Отдай результат
6 .Сервер: Больше результатов нет
Вот шаги 5 и 6 — критичны. Если их не сделать, то сервер будет ждать, когда
к нему прийдет команда отдачи следующего результата, а не следующий запрос.
Посмотрите пример выборки данных — там есть правильная последовательность
вызовов методов mysqli: http://ru2.php.net/manual/en/mysqli.use-result.php
Неактивен
Решил проблему, если кому будет нужно.
После каждого вызова процедуры и обработки данных делайте дополнительно это действие
if ( mysqli_more_results($this->db_handle) ) {
$nextResult =mysqli_next_result($this->db_handle);
}
Оно проверяет есть ли еще резалт сеты, и если есть извлекаем его. Почемуто процедура возвращает 2 резалт сета (На сколько я понял)
Неактивен
Ну, по одному сету на каждую выборку внутри процедуры + 1 результат на
сам вызов процедуры (код ответа).
И лучше замените if на while.
Неактивен