2010-02-22 46 views
7

我正在與一個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調用執行正常也 腳本的其餘部分運行沒有問題上述被註釋掉。但它們不會同時運行。我最好的猜測是,這個電話正在做一些搞砸的事情。

+0

正在切換到mysqli或PDO的選項嗎? – VolkerK 2010-02-22 23:48:05

+0

我有整個腳本寫在MySQL(幾個查詢)。我希望如果有人知道這是什麼,在我重新寫它之前。 – DMin 2010-02-22 23:53:34

+3

mysql()是一堆廢話和棄用 – hobodave 2010-02-22 23:57:14

回答

8

您的存儲過程正在返回多個結果集。見this post

解決方案?使用古老的MySQL庫

  • 使用mysqli_multi_query
  • 停止 - 在庫MySQLi的i代表 「改良」 - 有很好的理由。
+0

mysqli沒有解決這個問題,但答案是非常有幫助的:-) – Richard 2016-06-26 16:51:19

0

看看這裏:http://us3.php.net/manual/en/function.mysql-query.php在評論中,一個人聲稱,他通過設置連接標誌爲MYSQL_MULTI_RESULTS(131072),使其工作。

但它會好得多使用的mysqli ...

+0

沒問題,解決了它。不是世界上最好的解決方案,但只要它有效,我很高興。這是我的腳本中的第一個查詢。我連接到數據庫,運行查詢。關閉連接。建立了新的連接並運行了腳本的其餘部分。 :) – DMin 2010-02-23 00:10:36

2

@DMin是這會工作,但你會導致服務器崩潰遲早的事。 只要做數學,一個對數據庫做3 *程序的頁面的請求! 想一想吧!

[更新]解決方案:

$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] 
0

了mysql_free_result(客戶機 - > RES);

while (mysql_more_results(client->conn)) 
{ 
    mysql_next_result(client->conn); 
} 

這確實魅力對我來說:)從一個存儲過程返回

0

結果集不能使用mysqli_query獲取正確的()。 mysqli_query()函數將語句執行和第一個結果集合提取到緩衝結果集中(如果有的話)。但是,有些額外的存儲過程結果集隱藏在用戶的後面,導致mysqli_query()無法返回用戶期望的結果集。

使用mysqli_real_query()或mysqli_multi_query()來獲取從存儲過程返回的結果集。這兩個函數都允許獲取語句返回的任意數量的結果集,例如CALL。

看看official manual

相關問題