我有这个脚本返回一个数组,其中包含 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 [experience] => 20 [2] => 20 [strength] => 30 [3] => 30 [damages] => 10 [4] => 10 )
条目行似乎加倍了,其他一些列以一些数字命名。如果您查看我的表的结构,会发现列 [0], [1], ..., [4]
包含与前面的列相同的值 (id
、name
等),但它们不应该在那里。
如果您有兴趣,这里是表格的结构:
+------------+-------------+------+-----+---------+----------------+
| 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
提前谢谢您!
最佳答案
->fetch()
返回一个包含数字键和关联键的“混合”数组。
在MySQLi中,要仅返回关联数组,您必须使用->fetch_assoc()
,要仅返回数字数组,您必须使用->fetch_row()
在 PDO 中,要仅返回关联数组,您必须使用 ->fetch(PDO::FETCH_ASSOC)
,要仅返回数值数组,您必须使用 ->fetch(PDO: :FETCH_NUM)
编辑:
在 PDO 中,您可以通过以下方式设置默认的获取模式:
$connection = new PDO( ... );
$connection->setAttribute( PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC );
四处搜索,我没有找到永久设置默认获取模式的可能性。
我不知道MySQLi是否允许设置默认的获取模式。
关于PHP/MySQL : Returning unknown columns,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35616182/