2

PHP での MySQL テーブルへのアクセスに関するチュートリアルでは、すべての値をリストするコードを次のように指定しました。

$query = "SELECT * FROM example"; 

$result = mysql_query($query) or die(mysql_error());


while($row = mysql_fetch_array($result)){
    echo $row['name']. " - ". $row['age'];
    echo "<br />";
}

出力する行がある場合に while ループが true を返し、それ以上ない場合に false を返す方法は理解していますが、次のように記述しても機能しない理由がわかりません。

$query = "SELECT * FROM example"; 

$result = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_array($result);

while($row){
    echo $row['name']. " - ". $row['age'];
    echo "<br />";
}

最初の行を返すだけです。これは、常に値を true として返すことを意味すると思いますが、その理由はわかりません。

4

5 に答える 5

7

これ:

$row = mysql_fetch_array($result)

while($row){
    echo $row['name']. " - ". $row['age'];
    echo "<br />";
}

実行ごとに1つの値しかとらないため、動作しません$row。つまり、whileループが永久に実行されます。

mysql_fetch_arrayドキュメントから:

フェッチされた行に対応する配列を返し、内部データ ポインターを前方に移動します。

代わりにwhile($row = mysql_fetch_array($result))バージョンでは、whileの条件式がすべてのループで実行されるため、mysql内部結果ポインターが前方に移動します (次の結果を読み取ります)。

于 2013-06-01T17:45:16.983 に答える
3

あなたはこれを保持する必要があります

while($row = mysql_fetch_array($result)){

なぜなら、すべてのループ「ターン」で $row が新しい値を取得するからです。while ステートメントの外で $row の値を設定すると、$row は同じ値のままになります。

于 2013-06-01T17:45:15.610 に答える
1

次のように while ループでmysql_fetch_array関数を使用する必要があります。

while(($row = mysql_fetch_array($result)) !== FALSE){
    echo $row['name']. " - ". $row['age'];
    echo "<br />";
}

レコードが残っていない場合、mysql_fetch_array 関数はfalseを返します。したがって、false が返されるまでループします。

于 2013-06-01T17:47:58.740 に答える
0

2 番目の例では、最初のループが終了するとすぐに mysql_fetch_array($result) を実行しないのに対し、最初の例では各ループが終了すると実行されるためです。

于 2013-06-01T17:46:23.247 に答える