簡體   English   中英

遷移到存儲過程時,MySQL“命令不同步”出現

[英]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_querymysqli_store_resultmysqli_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM