0

私は次のスニペットを持っています:

<?php
$query = mysql_query("SELECT * FROM users") or die(mysql_error());
echo "<table>";

while ($row = mysql_fetch_array($query))
{
    echo "<tr>";

    foreach($row as $value)
    {
        echo "<td>".$value."</td>";
    }

    echo "</tr>";

}

echo "</table>";?>

このスニペットは、テーブルから各データを1回出力する必要があると思います。問題は、私はそれを2回取得することです。だから、例えば

me@email.com me@email.com Joe Joe Bloggs Bloggs

なぜそれがこれをしているのでしょうか?

4

3 に答える 3

6

デフォルトでmysql_fetch_arrayは、数値と連想 ( MYSQL_BOTH) の両方が実行され、それぞれ 2 つのキーが与えられます。

数字キーが必要な場合は、使用します

while ($row = mysql_fetch_array($query, MYSQL_NUM))

連想配列が必要な場合は、次を使用します。

while ($row = mysql_fetch_array($query, MYSQL_ASSOC))

また、mysql_*関数は非推奨であり、代わりに MySQLi または PDO を使用する必要があることに注意してください。

于 2013-03-18T20:22:26.823 に答える
0

MySQL フェッチ配列

この関数はデフォルトMYSQL_BOTHで、番号付き配列とともに連想配列を提供する which を使用します。例えば:

テーブル:

name | emai
joe     joe@email.com

返される配列には

$row{
    [0] = "joe",
    ['name'] = "joe",
    [1] = "joe@email.com",
    ['email'] = "joe@email.com",
    }

MYSQL_ASSOCorMYSQL_NUMを 2 番目の引数として使用する必要があります。

注意: MySQL_* 関数は PHP 5.5 で非推奨になったため、使用しないでください。代わりに PDO または MySQLi_* を使用してください

于 2013-03-18T20:26:41.777 に答える
0

コードを変更してください:

while ($row = mysql_fetch_assoc($query)) {
...

そして... mysql_* 関数は非推奨です。mysqli_* または PDO への移行を検討してください。

そこには、1 つまたはすべての行を配列にフェッチする可能性があります...

  • 数値インデックスのみ
  • 連想インデックスのみ
  • 両方で(->あなたの場合は二重出力)
于 2013-03-18T20:25:46.440 に答える