【问题标题】:PHP/MySQL : Returning unknown columnsPHP/MySQL:返回未知列
【发布时间】:2016-02-25 00:49:14
【问题描述】:

我有这个脚本返回一个数组,其中包含 MySQL 数据库表中的一行值:

$player_login_request = $db->query('SELECT * FROM Players');
while ($player_login = $player_login_request->fetch())
{
    print_r($player_login);
}

这是这个脚本的输出:

Array ([id] => 2 [0] => 2 [name] => tom [1] => tom [经验] => 20 [2] => 20 [力量] => 30 [3] => 30 [伤害] => 10 [4] => 10)

似乎该行条目与以某些数字命名的其他一些列增加了一倍。如果您查看我的表的结构,[0], [1], ..., [4] 列包含的值与前面的列(idname 等)相同,但它们不应该存在。

如果您有兴趣,这里是表格的结构:

+------------+-------------+------+-----+---------+----------------+
| Field      | Type        | Null | Key | Default | Extra          |
+------------+-------------+------+-----+---------+----------------+
| id         | int(11)     | NO   | PRI | NULL    | auto_increment |
| name       | varchar(50) | YES  |     | NULL    |                |
| experience | int(11)     | NO   |     | NULL    |                |
| strength   | int(11)     | NO   |     | NULL    |                |
| damages    | int(11)     | NO   |     | NULL    |                |
+------------+-------------+------+-----+---------+----------------+
5 rows in set (0.01 sec)

如您所见,当我在命令行中执行SELECT * FROM Players 时,列不显示!

我不明白它背后的逻辑。我该如何摆脱它?
我希望有人在这里提供帮助:P

提前谢谢你!

【问题讨论】:

    标签: php mysql arrays database


    【解决方案1】:

    ->fetch() 返回一个带有数字键和关联键的“混合”数组。

    在 MySQLi 中,要仅返回关联数组,您必须使用 ->fetch_assoc(),要仅返回数值数组,您必须使用 ->fetch_row()

    在 PDO 中,要仅返回关联数组,您必须使用 ->fetch(PDO::FETCH_ASSOC),要仅返回数值数组,您必须使用 ->fetch(PDO::FETCH_NUM)

    编辑:

    在 PDO 中,您可以通过这种方式设置默认的 fetch 模式:

    $connection = new PDO( ... );
    $connection->setAttribute( PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC );
    

    四处搜索,我没有找到永久设置默认获取模式的可能性。

    我不知道 MySQLi 是否允许设置默认获取模式。

    【讨论】:

    • 好的,谢谢。我最近重新安装了 PHP,以前我也经常做一些类似的编程工作(刚回来),但我不记得必须按照你告诉我的去做。我确定你的答案是正确的,但是有什么方法可以默认返回关联数组吗?
    • @tomfl 您使用哪个驱动程序? PDO 还是 MySQLi?
    • 你好,我正在使用 PDO。
    • 哦,这很有趣。我会调查的。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2019-04-23
    • 1970-01-01
    • 2014-02-07
    • 2014-12-29
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多