尝试在一个非常简单的应用程序中获取一些数据库结果.
码
$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());
Run Code Online (Sandbox Code Playgroud)
这就是输出
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
)
)
Run Code Online (Sandbox Code Playgroud)
所以似乎为每个结果创建了一个额外的密钥.当我在一两个月前编码时,情况并非如此.这里有什么问题或者这是现在的PDO行为吗?
这是可配置的行为:
$statement->fetchAll(PDO::FETCH_ASSOC)
Run Code Online (Sandbox Code Playgroud)
将返回关联数组 - 请参阅参数$fetch_style.
您可以配置您的pdo实例始终执行此操作:
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
Run Code Online (Sandbox Code Playgroud)
还存在PDOStatement::setFetchMode()使用重复的准备语句时,这是有用的.