我对PHP的PDO还是有些陌生,因此我不明白为什么它做的有些奇怪。我有以下代码(按预期工作)。
$db = new Database;
$query = $db->prepare( 'SELECT * FROM users WHERE id = :value LIMIT 1' );
$query->bindParam( ':value', $value );
$query->execute();
$result = $query->fetch();
但是,我很好奇为什么它返回一个看似重复的响应。这是返回的示例:
/file.php:X:
array (size=X)
'id' => string '2' (length=1)
0 => string '2' (length=1)
'fullname' => string '' (length=0)
1 => string '' (length=0)
'email' => string 'bob@example.com' (length=15)
2 => string 'bob@example.com' (length=15)
...
我的数据库中有ID
,fullname
和email
等的列,等等,但是为什么它还会返回键值对两次,而第二个默认为基于int的密钥?
答案 0 :(得分:2)
您没有指定所需的提取样式,并且默认情况下将其设置为PDO::FETCH_BOTH
,这就是为什么要获取重复数据的原因。因此,您需要指定返回数组的所需样式(按数字或字符串索引,又称关联数组或对象...),您需要更改此行:
$result = $query->fetch();
在其中获取关联数组:
$result = $query->fetch(PDO::FETCH_ASSOC);
或者这可以获取以0开头的数字索引的经典数组:
$result = $query->fetch(PDO::FETCH_NUM);
还有更多的提取样式,有关更多信息,请参见php手册pdo fetch method
希望我进一步推动了你。