1

このコードが機能していました(と思いました)。

$sql = "SELECT
          order.id,
          order.date
        FROM
          order";
$result = mysql_query($sql) or die(mysql_error());
$rows = mysql_fetch_assoc($result);

foreach($rows as $row){
  echo $row['id'].": ".$row['date']."<br>";
}

結果は、私が使用した場合と同じでした:

while($row = mysql_fetch_assoc($result)){
  echo $row['id'].": ".$row['date']."<br>";
}

しかし、奇妙なことに、今日、それは機能しなくなりました。または、決してそうではありませんが、その後、私は少し頭がおかしくなっています.

配列 $rows は、クエリからではなく「手動で」入力することもできるため、 foreach() を使用したいと思います。

私は何を間違っていますか..?

4

3 に答える 3

4

それは(適切に)機能したことはありません。mysql_fetch_assoc()1行のみを返しますforeach。結果セットの最初の行の列を繰り返しているだけです。

foreach最初にwhile(or for) ループを使用せずに使用して、結果行を配列にフェッチすることはできません。

あなたが言うように、を使用したい場合foreachは、これを行います:

 $rows = array();
 while ($row = mysql_fetch_assoc($result)) {
     $rows[] = $row;
 }

 foreach ($rows as $row) {
     // ...
 }

また、新しいコードで関数を使用しないでくださいmysql_*。それらはもはや保守されておらず、公式に非推奨です赤いボックスが見えますか? 代わりにプリペアド ステートメントについて学び、 PDOまたはMySQLiを使用してください。この記事は、どちらを使用するかを決めるのに役立ちます。PDO を選択する場合は、ここに良いチュートリアルがあります。

于 2013-03-19T13:34:06.907 に答える
1

まず、mysql_xx()関数が非推奨であることを知っておく価値があります。それらをもう使用しないで、代わりにmysqliまたはPDOライブラリにコードを切り替えることをお勧めします。

さて、あなたの質問に答えるために:

foreach関数によって返されるレコードセットでは使用できませんmysql_xxx()。それは単にできません。

ただし、どちらの代替 API (mysqliおよびPDO) もレコードセット オブジェクトを反復子として返すため、 を使用してそれらをループできます。foreach

したがって、あなたの質問に対する答えは次のとおりです。foreachレコード セットをループするために使用する場合は、他のデータベース API のいずれかに切り替える必要があります。

(おまけとして、切り替えた場合、他の API も古い関数よりもかなり多くの追加機能を提供しmysql_xx()ます)

于 2013-03-19T13:39:57.250 に答える
0

mysql_fetch_assoc単一行のみを読み取ります。

これはforeach、単一行の列を反復処理することを意味します。

于 2013-03-19T13:35:16.530 に答える