Я выполняю запрос с хранимой процедурой mysql:
$AddProf_qr = mysql_query("call AddStudent('$d_Pass', '$d_Titl', '$d_Firs', '$d_Midd', '$d_Last', '$d_Addr', '$d_City', '$d_Stat', '$d_County', '$d_Zipc', $d_Gend, '$d_Birh', '$d_Phom', '$d_Phoh', '$d_Phoo', '$d_Email', '$d_Webs', '$d_Natn', '$d_Profsn', '$d_Compny', '$d_Desig', $d_ProfAcc)", $this->c_remote) or die ("first call" . mysql_error($this->c_remote));
Я должен получить только один результат от вызова: @@ IDENTITY = номер;
$AP_result = mysql_fetch_array($AddProf_qr); $CurrentSID = $AP_result['@@IDENTITY'];
который отлично работает. но когда я запускаю еще один запрос на обновление mysql сразу после этого, он дает сообщение об ошибке:
Ошибка: 2014 (CR_COMMANDS_OUT_OF_SYNC) Сообщение: команды не синхронизированы; вы не можете запустить эту команду сейчас
я пробовал вставить:
mysql_free_result($AddProf_qr);
но все тот же.
Вызов MySQL выполняется отлично, а остальная часть скрипта выполняется без проблем, описанных выше. но они не работают одновременно. Мое лучшее предположение, вызов делает что-то, что возится с этим.
Ваша хранимая процедура возвращает несколько наборов результатов. Посмотреть это сообщение
Решение?
@DMin Да, это сработает, но рано или поздно вы столкнетесь с сервером. Просто сделайте математику, один запрос на страницу, которая делает 3 * количество процедур в базе данных! Просто подумай об этом!
[UPDATE] решение:
$aCategory = array(); $it=0; $res = $mysqli->multi_query( "call ListCategory();" ); if( $res ) { do { if ($result = $mysqli->store_result()) { while( $row = $result->fetch_row() ) { $aCategory[$it] =$row; $it= $it + 1; } $result->close(); } } while( $mysqli->next_result() ); } foreach($aCategory as $row){ echo . $row[0] . " - " . $row[1] . "<br />"; }
Просто хотел добавить, что вы готовы вызвать следующую процедуру.
PS: Таким образом, я не мог использовать
echo $aCategory['category_id'] ; //or echo $aCategory->category_id; //just echo $aCategory[0]
Посмотрите здесь: http://us3.php.net/manual/en/function.mysql-query.php. В комментариях один парень утверждает, что он заработал, установив флаг подключения в MYSQL_MULTI_RESULTS (131072).
Но было бы гораздо лучше использовать mysqli …
mysql_free_result (client-> Рез);
while (mysql_more_results(client->conn)) { mysql_next_result(client->conn); }
Это сделало для меня обаяние 🙂
Наборы результатов, возвращаемые из хранимой процедуры, не могут быть правильно выбраны с помощью mysqli_query (). Функция mysqli_query () объединяет выполнение операторов и выборку первого набора результатов в буферный результирующий набор, если таковой имеется. Тем не менее, есть дополнительные контрольные таблицы хранимых процедур, скрытые от пользователя, которые заставляют mysqli_query () не возвращать ожидаемые конечные наборы пользователей.
Наборы результатов, возвращаемые из хранимой процедуры, выбираются с помощью mysqli_real_query () или mysqli_multi_query (). Обе функции позволяют получать любое количество наборов результатов, возвращаемых оператором, например CALL.
посмотреть официальное руководство