使用PDO结果数据库时,返回值中的额外(双)数组字段

时间:2014-04-09 17:03:04

标签: php mysql arrays pdo

我使用PDO库从PHP脚本访问MySQL数据库,我之前没有使用过(我对MySQLi更熟悉)。我在结果中看到了额外的意外字段。它们不会干扰我的代码,但我想知道它们来自哪里。

这是我的数据库电话:

SELECT 
    author.author_id AS author_id,
    author.name_last AS name_last,
    author.name_first AS name_first,
    author.detail AS detail     
FROM join_play_author
LEFT JOIN author
ON join_play_author.author_id = author.author_id
WHERE join_play_author.play_id = :play_id
ORDER BY author.name_last

然后我成功绑定并执行,我的结果包含我所要求的所有字段以及相应的标签。但是,每个字段在结果集中出现两次:一次使用我请求的标签,一次使用额外的自动递增值。例如,一个结果集(使用print_r()打印)如下所示:

Array 
(
    [author_id] => 41 
    [0] => 41 
    [name_last] => Dekker 
    [1] => Dekker 
    [name_first] => Thomas 
    [2] => Thomas 
    [detail] => 0 
    [3] => 0 
)

这些双字段并没有主动干扰我的代码,但是在调试期间它们很烦人,我担心它们会影响大型结果集的性能,这将是生产网站上的一个问题。

删除AS标记不会影响结果数组。

有什么想法吗?这只是PDO的一个功能 - 如果是这样,有什么方法可以关闭它吗?我不记得在MySQLi结果中看到这些额外的字段,尽管我可能错过了它们。

2 个答案:

答案 0 :(得分:5)

PHP库可能会将PDO :: FETCH_BOTH设置为结果。如果您不想在阵列中设置额外的密钥,则需要将其更改为PDO :: FETCH_ASSOC。大多数库允许您在不修改代码的情况下进行更改。您必须阅读相关文档。

PDO语句提取选项的文档。 http://www.php.net/manual/en/pdostatement.fetch.php

答案 1 :(得分:2)

正如chapka在其评论中所述 - 使用setAttribute清除双重结果的结果:

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