尝试在一个非常简单的应用程序中获取一些数据库结果。
代码
$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行为吗?
答案 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
并设置关联返回。