3

好吧,所以我对 MySQL 的一切都有一种与生俱来的恐惧

这是我的桌子:

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

这是我的PHP code连接到数据库之外

$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
)

为什么这是输出?名字翻倍?为什么为 [1] 和 [name] 设置名称?

另一方面是他们将 PHP 与 MySQL 结合使用的更好方法

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);(or mysql_fetch_assoc()),或者您是否只需要数字索引,请使用$row = mysql_fetch_array($raw,MYSQL_NUM);(or 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 回答