奇怪的PDO结果返回每个行值的键

时间:2013-11-03 22:06:47

标签: php mysql pdo

尝试在一个非常简单的应用程序中获取一些数据库结果。

代码

$pdo = new PDO("mysql:host=localhost;dbname=soundinsider", "root", "");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT * FROM users";
$query = $pdo->query($sql);

echo '<pre>';
print_r($query->fetchAll());

这就是输出

Array
(
[0] => Array
    (
        [user_id] => 1
        [0] => 1
        [username] => simon
        [1] => simon
        [email] => madeup
        [2] => madeup

    )

[1] => Array
    (
        [user_id] => 2
        [0] => 2
        [username] => bobwin
        [1] => bobwin
        [email] => fake@email.com
        [2] => fake@email.com

    )

)

因此似乎为每个结果创建了一个额外的密钥。当我在一两个月前编码时,情况并非如此。这里有什么问题,或者这是现在的PDO行为吗?

2 个答案:

答案 0 :(得分:5)

这是可配置的行为:

$statement->fetchAll(PDO::FETCH_ASSOC)

将返回关联数组 - 请参阅参数$fetch_style

您可以[{3}}将您的pdo实例始终执行此操作:

$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

还有configure在使用重复的预备语句时非常有用。

答案 1 :(得分:2)

If you have a look at the manual,您会看到fetchAll默认返回关联索引和数字索引 - 我建议您改用fetch并设置关联返回。