Здравствуйте , столкнулся с такой проблемой. Есть метод, который выполняет функцию и возвращает результат в виде массива Если метод запускать 1 раз (за все время работы сценария php) все работает нормально, если вызвать например 2 раза (2 разные процедуры) на втором вызове вылетает ошибка Commands out of sync; you can't run this command now Вот собственно код: PHP: $result = mysqli_query($this->db_handle,"CALL {$proc}"); $rows = array(); if ($result){ while ( $row = mysqli_fetch_assoc($result) ) { $rows[] = $row; } }else{ echo mysqli_error($this->db_handle); } mysqli_free_result($result); return $rows; Зарание благодарен за вашу помощь.
Спасибо, но MYSQLI_ASYNC mysqli_query() - не схавала. mysqli_query() expects parameter 3 to be long, string given in MYSQLI_ASYNC - а что это вообще такое?
http://www.google.ru/search?ie=UTF-8&hl=ru&q=mysqlnd Практически - это означает, что нужна версия PHP ветки 5.3
Спасибо за помощь. А это точно мне поможет? Можешь объяснить почему возникает ошибка Commands out of sync; you can't run this command now ?
Amatory999 Ошибка возникает, потому что где-то нарушается правильный порядок работы с соединением. Использование MYSQLI_ASNC позволит выполнять запросы с нарушением порядка (асинхронно), но проблема проектирования то останется ))
вырезано цензурой во избежании очередного срача(akrinel) PHP: <?php var_dump($this->db_handle->more_results()); $nextResult =$this->db_handle->next_result(); var_dump($nextResult->fetch_array()); $otherResult = $this->db_handle->query('SHOW DATABASES'); var_dump($otherResult->fetch_array());
Simpliest, спасибо большое. В поле $this->db_handle у меня хранится дискриптор полученный от функции mysqli_connect(); Не могли бы Вы написать что я должен сделать в своем случае?
Simpliest, спасибо еще раз. Можете ответить почему вызов процедуры возвращает 2 результата? Причем 2й извлеч не получилось.
Во-первых, для mysqli это не дескриптор. А полноценный объект. C которым можно делать так PHP: <?php $this->db_handle->query('tram-pam-pam'); и это описано в мануале. Во-вторых, что значит второй результат я не помню, при желании можно погуглить. Извлечь же его можно при помощи указанного метода next_result()
Да, кстати, результатов может быть больше чем 2. Код (Text): Число результатов = (Число SELECT в процедуре) + 1
Есть вариант что соединение зарывается в диструторе объекта (если он есть). Просто один раз сталкивался с такой проблемой.