2016-06-16 55 views
0

我試圖在mysqli_fetch_array上運行的WHILE循環內執行查詢。查詢提供了以下錯誤:PHP/MySQL:WHILE循環內同步查詢?

Error: Commands out of sync; you can't run this command now

我發現你不能有同步查詢。這裏是我的代碼

$query "SELECT * FROM table"; 
$exec = mysqli_query($con, $query); 

while($loop = mysqli_fetch_array($exec)){ 

$data = $loop['data']; 

$sim = "SELECT * FROM table2 WHERE col1 = '$data'"; 
$execsim = mysqli_query($con, $sim); 
$getsim = mysqli_fetch_array($execsim); 
$somedata = $getsim['somedata']; 

//insert $somedata and $data into table3 

} 

經過一番研究,我發現store_result()也許會有幫助。請原諒我的無知,因爲這對我來說是新的。沒有任何示例/解決方案可以在WHILE循環場景中使用(這是否有所作爲?) - 大多數也都是面向對象的風格。

什麼是解決這個問題最有效的方法?

+0

我需要在循環中使用select有一個原因,我將更新 –

+1

而不是基於第一個查詢的結果執行另一個select查詢,您可以將兩個表連接在一起並使用一個查詢。 –

+0

我會好奇的;我認爲'SELECT * FROM table2 WHERE col1 IN(SELECT data FROM table)'將從table2獲取所有條目,其中col1與數據匹配。此時,您可以將table2.somedata和table2.col1插入到table3中。 –

回答

3

對此的最有效的解決方法是避免處理逐行激動行(RBAR),並只對該集執行操作,並完成它。

INSERT INTO table3 (somedata, col1) 
SELECT t2.somedata 
    , t2.col1 
    FROM table2 t2 
    JOIN table1 t1 
    ON t1.data = t2.col1 
ORDER BY t2.somedata, t2.col1 

如果不能滿足要求,那麼一些要求已經從規範中省略,我們只能猜測你實際上是試圖實現。

作爲另一種選擇,避免這兩個查詢,並使用連接操作,如上面的INSERT ... SELECT語句所示。 (從SELECT開始)。

在規範中沒有給出循環內令人難以忍受的循環的原因,以便單獨處理行。

+0

我想我的解釋並不夠具體,因爲稍微有點多。在WHILE循環內部運行另一個查詢之前,使用上面的查詢並關閉/打開連接取得了訣竅。謝謝 –