我有如下的PHP腳本:MeekroDB錯誤「命令不同步,你無法運行此命令現在」
require_once 'meekrodb.2.1.class.php';
DB::$user = 'usr';
DB::$password = 'pwd';
DB::$dbName = 'db';
DB::$encoding = 'utf8';
$results = DB::queryFirstField("
CALL getSequence('time_id', %i); // ***** Stored procedure call *****
", TENANT_ID);
DB::insert('timeentry', array(
'tenant_id' => TENANT_ID,
'time_id' => $results,
'timestart' => DB::sqleval("now()"),
'assig_id' => $assig_id
));
我收到以下錯誤:
QUERY: INSERT INTO
timeentry
(tenant_id
,time_id
,timestart
,assig_id
) VALUES (1, '42', now(), '1')ERROR: Commands out of sync; you can't run this command now
如果我用SELECT語句替換對存儲過程的調用,一切正常。
$results = DB::queryFirstField("
SELECT 45; // ***** SELECT statement *****
");
DB::insert('timeentry', array(
'tenant_id' => TENANT_ID,
'time_id' => $results,
'timestart' => DB::sqleval("now()"),
'assig_id' => $assig_id
));
我還沒有分析MeekroDB庫的內部結構(http://www.meekro.com)。
我試圖在事務中包裝每個語句,但在調用存儲過程之後立即執行COMMIT時出現相同的錯誤。
任何幫助,非常感謝。
感謝比爾爲您的答案,我怎麼知道存儲過程是否得到一個或多個結果集。我已經在MySQL客戶端中執行了它,我只得到一個結果......它可能是一個MeekroDB錯誤。我已經聯繫了作者。我可以執行一個命令(在這個庫之外)爲了關閉掛起的查詢嗎? – supercoco
我設法通過更改庫來關閉連接。謝謝你的幫助。當然,我希望得到這個問題的官方修復。 – supercoco
即使給定的存儲過程只返回一個結果集,調用它也會調用多查詢接口。這可能只是MeekroDB開發人員未預料到的API使用情況。是的,您可以關閉語句,或者您可以調用'while($ pdoStmt-> nextRowset()){}'強制它迭代到結果鏈的末尾。另見http://php.net/manual/en/pdostatement.nextrowset.php –