2017-11-12 12 views
0

fetch_assocがテーブルの次の行を望むことを知っていますか?私たちはこのようなコード必要があります場合は

$result = $conn->query('SELECT username FROM users'); 
$row1 = $result->fetch_assoc(); 
echo $row1['username'], '<br>'; 
$row2 = $result->fetch_assoc(); 
echo $row2['username'], '<br>'; 

を第2のエコーは、表の2番目の行からユーザー名を表示しますが、なぜでしょうか? fetch_assoc()は、次の行を返すことをどのようにしているかを知っています。呼び出された回数を数える内蔵カウンタがいくつかありますか?

+0

'fetch_assoc()'を呼び出すたびに、現在の行が返され、**自動的に**が次の行に進みます。 – ashleedawg

+0

このhttp://php.net/manual/en/mysqli-result.fetch-assoc.phpにはマニュアルがありますが、それを読まなかったのですか? –

答えて

3

返される行のリストにポインタを保持します。クエリによってデータが返されると(結果オブジェクトが作成されるとき)、クエリによって返されたすべての行が取得されます。

> row1 foo bar 
    row2 baz boo 
    row3 tst tmp 

あなたがfetch_assocを呼び出すと、行ポインタポイントが返されますし、ポインタが進んでいる:戻るにはより多くの何もないまで

return_val = (row1, foo, bar) 
increment pointer 

    row1 foo bar 
> row2 baz boo 
    row3 tst tmp 

return return_val  

これが繰り返されます。 fetch_assocは永遠にnullを返します。

最後の部分はあなたが自動的whileループ内でそれを使用することができます:

while ($row = $result->fetch_assoc()) { 
    // do something with $row 
} 

nullを返しfetch_assocすると、whileループは終了し、実行はループの外で続けて - と、完全な結果セットが読み込まれました。

+0

@Randallなぜ私の質問は答えに値しませんでしたか?私は使用しているツールを理解したいだけです。 – Remniscate

関連する問題