2

コードは次のとおりです。

<?php
    $q = 'SELECT * FROM categories ORDER BY category'; 
    $r = mysqli_query($dbc,$q);
    while (list($id,$category) = mysqli_fetch_array($r,MYSQLI_NUM)) {
        echo '<li><a href="category.php?id=' . $id . '" title="' . $category . '">' . $category . '</a></li>';
    }
?>

変数名 $id および $category が、ループの各反復を通じてデータベースからフェッチされた単一の行に割り当てられているように見えます。ループが最初からやり直すたびに、次の行が選択されます。私の質問は、テーブルの次の行を選択することをどのように知るのですか?

「for」ループがテーブルのすべての行をステップスルーできるように、行にインデックスが付けられているわけではありません。誰かが私にこれを説明できますか?

4

3 に答える 3

2

簡単に言えば、traversableを実装しているためです。PHP サイトでmysqli_result クラス定義を調べてください。mysqli_result とまったく同じように、そのクラスのオブジェクトをトラバース可能にするIteratorを(正しく) 実装するだけで、独自のクラスでも実際にこれを行うことができます。また、例の下にあるiteratorのページを見ると、これが mysqli_result などのクラス内でどのように管理されるかの基本的なモックアップが見つかります。

于 2013-08-26T02:45:56.743 に答える
0

mysqli_fetch_array を呼び出すたび$rに、例で表される結果セットの内部ポインターが増加するため、次の呼び出しで次の要素が返されます。

要素がなくなると、返される結果は NULL になります。While制御構造は、NULL が返されるとプロセスを停止するように注意します。

結果セットは MySQL クエリの出力に基づいているため、単一のテーブルを表す必要はありません。

于 2013-08-26T02:46:16.283 に答える