1

尝试获取一些数据库会导致一个非常简单的应用程序。

代码

$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 行为?

4

2 回答 2

6

这是可配置的行为:

$statement->fetchAll(PDO::FETCH_ASSOC)

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

您可以将您的 pdo 实例配置为始终执行此操作:

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

在使用重复的准备好的语句时,这也PDOStatement::setFetchMode()很有用。

于 2013-11-03T22:32:57.593 回答
2

如果您查看手册,您会看到fetchAll默认返回关联索引和数字索引 - 我建议您fetch改用并设置关联返回。

于 2013-11-03T22:10:59.983 回答