2013-03-12 45 views
7

這個簡單的代碼調用兩個MySQL過程,但在第一個返回值之後,它會在第二個查詢中返回一個錯誤。PHP命令不同步錯誤

注意:運行第一個或第二個將自己將正確返回每個。所以查詢工作,只是不在一起。

完整的錯誤是: Invalid query: Commands out of sync; you can't run this command now

任何想法,請。

<?php 

require_once ('connection.php'); 
//First Query and Output 

$result = mysql_query("CALL C01_Client_Summary_ByAccount(1, '2012-02-27', '2013-03-29');"); 
if (!$result) { 
die('Invalid query: ' . mysql_error()); 
} 
while($row=mysql_fetch_array($result)) 
{ 
echo $row['CommisionPercentage']; 
} 

mysql_free_result($result); 
//END First Query and Output 

//Second Query and Output 
$new2 = mysql_query("CALL C01_Client_Summary_ByBetType(1, '2012-02-27', '2013-03-29');"); 
if (!$new2) { 
die('Invalid query: ' . mysql_error()); 
} 
while($row=mysql_fetch_array($new2)) 
{ 
echo $row['Turnover']; 
} 
//END Second Query and Output 

?> 
+1

請問您第一個'CALL()'原因2分的結果集? – Wrikken 2013-03-12 22:45:36

+0

我找到了這個解決方案 我需要將連接更改爲 include('connection.php'); 然後在第一個查詢關閉連接後 mysql_close($ con); 然後在第二個查詢之前重新打開連接 include('connection.php'); – user2162372 2013-03-12 23:17:21

+0

請參閱http://stackoverflow.com/q/614671/632951 – Pacerier 2015-04-20 11:23:46

回答

5

PHP的舊MySQL擴展與存儲過程無法正常工作。不幸的是,接縫是無法執行多個存儲過程的。問題是第一個過程留下了一些導致第二個失敗的緩衝結果集。但是,您可以使用mysqli擴展。這裏是如何做到這一點一個很好的例子:

http://www.daniweb.com/web-development/php/threads/234868/error-commands-out-of-sync-you-cant-run-this-command-now

+0

謝謝 - 我發現也 - 我的解決方案可能是作弊 – user2162372 2013-03-12 23:21:53

+1

解決方案是切換到'mysqli'或'PDO'擴展名。請記住,舊的'mysql_xxX()'函數已被棄用且不受支持;有一天你需要升級你的PHP版本,如果你還沒有切換,你會發現你的代碼根本不起作用;當發生這種情況時,修復它將是一個真正的痛苦。現在切換,而它很容易做到。 – Spudley 2013-03-12 23:37:13