3

さて、私はすべてのMySQLを本質的に恐れています

これが私のテーブルです:

+----+-----------------+------+
| id | name            | age  |
+----+-----------------+------+
|  1 | Timmy Mellowman |   23 |
|  2 | Jeff Johnson    |   18 |
+----+-----------------+------+

これが私のPHP codeDBへの接続以外)です

$raw = mysql_query("SELECT * FROM example") or die(mysql_error()); 
$row = mysql_fetch_array($raw);
echo "\n\n";
print_r($row);

これが私の出力です:

Array
(
    [0] => 1
    [id] => 1
    [1] => Timmy Mellowman
    [name] => Timmy Mellowman
    [2] => 23
    [age] => 23
)

なぜこれが出力なのですか?名前を2倍にしますか?[1]と[name]の両方に名前が設定されているのはなぜですか?

そして、サイドには、MySQLでPHPを使用するためのより良い方法があります

4

2 に答える 2

5

mysql_fetch_arrayのPHPドキュメントによると:

フェッチされた行に対応する文字列の配列を返します。行がこれ以上ない場合はFALSEを返します。返される配列のタイプは、result_typeがどのように定義されているかによって異なります。MYSQL_BOTH(デフォルト)を使用すると、結合インデックスと数値インデックスの両方を含む配列を取得できます。MYSQL_ASSOCを使用すると、関連付けられたインデックスのみを取得し(mysql_fetch_assoc()が機能するため)、MYSQL_NUMを使用すると、数値インデックスのみを取得します(mysql_fetch_row()が機能するため)。

したがって、行の$row = mysql_fetch_array($raw);$ rowは、デフォルトであるため、連想インデックスと数値インデックスの両方を持つ配列を受け取ります。連想インデックスのみが必要な場合は$row = mysql_fetch_array($raw,MYSQL_ASSOC);(またはmysql_fetch_assoc())を使用し、数値インデックスのみが必要な場合は$row = mysql_fetch_array($raw,MYSQL_NUM);(またはmysql_fetch_row())を使用します。

すべての行を取得するには、次のようなものを使用します。

while ($row = mysql_fetch_array($raw)) {
    echo "<p>" . $row['id'] . " - " . $row['name'] . " - " . $row['age'] . "</p>\n";  
}
于 2012-12-23T03:33:33.230 に答える
2

戻りタイプが指定されていない場合、デフォルトはmysql_fetch_array ( $raw ,MYSQL_BOTH ) 上記のように連想インデックスと数値インデックスの両方を返します。

数値インデックスには、

$row = mysql_fetch_array($raw, MYSQL_NUM)

連想インデックスには、

$row = mysql_fetch_array($result, MYSQL_ASSOC)

すべての行にアクセスするには、whileループを使用します

while ($row = mysql_fetch_array($row, MYSQL_NUM)) {
    printf("ID: %s  Name: %s Age:%s", $row[0], $row[1],$row[2]);  
}

または、連想インデックスを使用している場合

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    printf("ID: %s  Name: %s Age:%s", $row["id"], $row["name"],$row["age"]);
}
于 2012-12-23T03:35:36.900 に答える