請問一下
$lh = mysql_connect( 'localhost', 'root', 'root' );
$qry = "SELECT * FROM aaa LIMIT 10";
$rh = mysql_unbuffered_query($qry, $lh);
$thread = mysql_thread_id ( $lh );
while ( $res = mysql_fetch_row( $rh ) )
{
$sql = "INSERT INTO bbb(goods_id,user_id) values(1111,2222)";
mysql_query($sql);
//如果在迴圈裡執行了其它SQL那麼while就終止了。請問是什麼情況?
}
回複討論(解決方案)
掩耳盜鈴??你屏蔽了錯誤資訊:
Function called without first fetching all rows from a previous unbuffered query
函數調用沒有首先取從先前的無緩衝的查詢所有行
對手冊中的描述,總不能視而不見吧?
在向 MySQL 發送一條新的 SQL 查詢之前,必須提取掉所有未緩衝的 SQL 查詢所產生的結果行。
@xuzuning 請問要怎麼處理,不太明白提取掉所有未緩衝的SQL查詢所產生的結果行。
比如你有 $qry = "SELECT * FROM aaa LIMIT 10";
也就是 $rh = mysql_unbuffered_query($qry, $lh); 後
資源 $rh 中應有不多於 10 行的結果
你要把他們都讀出來以後,才可執行其他的資料庫操作
說白了就是:你不讓 MySQL 緩衝結果,你就得自己緩衝結果
@xuzuning 白話一點說就是上面代碼中 while 裡面不能發送新的SQL,因為結果沒有提取完?
是這樣理解不
是的,就是這樣!
非常感謝版主的細心講解。
/如果在迴圈裡執行了其它SQL那麼while就終止了。請問是什麼情況?
因為while ( $res = mysql_fetch_row( $rh ) ) 的mysql_fetch_row($rh) 被影響了