[英]MySql Commands out of sync when storing stored procedure result in dataframe
[英]MySQL “commands out of sync” appears when migrating to stored procedures
我有一些正在工作的php / mysql,現在正在遷移到存儲過程。
一旦調用了任何存儲過程,隨后的CALL和SELECT都會失敗,並顯示“命令不同步;您現在不能運行此命令”。
現有的非SELECT存儲過程可以正常工作。
function db_all ($query)
{
log_sql_read ($query);
$result = mysql_query ($query, db_connection ());
if (!$result)
{
log_sql_error ($query);
return Array ();
}
$rows = Array ();
while ($row = mysql_fetch_assoc ($result))
array_push ($rows, $row);
mysql_free_result ($result);
return $rows;
}
db_all ("SELECT 1 as `test`");
db_all ("SELECT 2 as `test`");
db_all ("CALL `$db`.`select_info`($id);"); // RETURNS CORRECT DATA
db_all ("CALL `$db`.`select_info`($id);"); // ERROR HERE
db_all ("SELECT 5 as `test`"); // ERROR HERE
由於未調用mysql_free_result
,因此在其他地方解釋了此錯誤,但我確實將此稱為它。 那怎么了
我看到了一些有關mysqli的解決方案。 我現在需要一個非mysqli解決方案。
問題是執行時,存儲過程將為您提供兩個結果集。 一個帶有實際結果集,另一個帶有執行狀態。 而且,在進行另一個返回結果集的調用之前,您需要先消耗掉兩者。
在mysqli_*
您可以利用mysqli_multi_query
, mysqli_store_result
和mysqli_next_result
來實現這一點。 您可以在mysqli
查看如何執行此操作 。
對於mysql_*
您可以在獲取結果后關閉連接。
function db_all ($query)
{
$link = db_connection(); //Open connection
log_sql_read ($query);
$result = mysql_query ($query, $link);
if (!$result)
{
log_sql_error ($query);
return Array ();
}
$rows = Array ();
while ($row = mysql_fetch_assoc ($result))
array_push ($rows, $row);
mysql_free_result ($result);
mysql_close($link); //Close the connection
return $rows;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.