我有一種情況,我想在嵌套循環中多次使用預處理語句的結果。外部循環處理另一個查詢的結果,內部循環是準備好的語句查詢的結果。因此,代碼會是這樣的(只是「pseudoish」,展示的概念):PHP,MySQL準備好的語句 - 你可以通過調用data_seek(0)多次使用執行結果嗎?
// not showing the outer query, it is just a basic SELECT, not prepared statement
// we'll call it $outer_query
$obj_array = array(); // going to save objects in this
$ids = array(18,19,20); // just example id numbers
$query = "SELECT field1, field2 FROM table1 WHERE id=?";
$stmt = $db->prepare($query);
foreach ($ids as $id) {
$stmt->bind_param("i", $id);
$stmt->execute();
$stmt->bind_result($var1, $var2);
$stmt->store_result(); // I think I need this for data_seek
while ($q1 = $outer_query->fetch_object()) {
while ($stmt->fetch()) {
if ($q1->field1 == $var1) { // looking for a match
$obj = new stdClass();
$obj->var1 = $var1;
$obj->var2 = $var2;
$obj_array[] = $obj;
$stmt->data_seek(0); // reset for outer loop
break; // found match, so leave inner
}
}
}
}
這個問題我似乎經歷的是價值觀沒有得到在變量的約束,因爲我會後的預期我第一次在內部循環中使用fetch。具體來說,在一個例子中,我用foreach的3個id運行,第一個id被正確處理,第二個被錯誤地處理(在內部循環中找不到匹配,即使它們存在),然後第三個被正確處理。
是不是有什麼毛病序列中的準備statment函數調用我上面做的,或者這是使用準備好的語句的結果無效的方法是什麼?
謝謝。
實際情況比上面我所出更加複雜和JOIN使一個單一的查詢是行不通的。上面我想知道的是,如果在循環中使用準備好的語句的概念有任何問題,以及爲什麼我無法重複執行多次相同結果並獲取()的任何明顯原因。感謝您的建議,但它並沒有真正回答我的問題。 – 2010-05-20 17:40:32
我很抱歉@Carvell,但這是不可能的。沒有JOIN可以使查詢無法正常工作。由於缺乏經驗,你只會走錯路。你最好學習正確的方法,而不是堅持錯誤的方式。這是一種生活。有時我們所得到的答案不是我們所要求的。 – 2010-05-20 17:48:29
我認爲你和我沒有溝通:)我確實發現了我遇到的問題(見下文)。我重新檢查了一下,看看是否有辦法在單個查詢中獲得我需要的結果,但在這種情況下,我認爲這不會起作用。我不想陷入我實際情況的所有複雜情況,因爲它會讓問題太長,所以你有缺乏所有細節的缺點。對於那個很抱歉。再次感謝您的輸入。非常感激。 – 2010-05-20 18:17:33