Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用PDO结果数据库时返回值中的额外(双)数组字段_Php_Mysql_Arrays_Pdo - Fatal编程技术网

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

Php 使用PDO结果数据库时返回值中的额外(双)数组字段,php,mysql,arrays,pdo,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

我正在使用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结果中看到过这些额外的字段,尽管我可能错过了它们。

PHP库可能将PDO::FETCH_两者都设置为结果。如果不想在数组中设置额外的键,则需要将其更改为PDO::FETCH_ASSOC。你必须阅读有关这方面的文档

关于PDO语句获取选项的文档。

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

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

谢谢成功了$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC);处理掉多余的行。