【问题标题】:Extra (double) array fields in return value when using PDO result database使用 PDO 结果数据库时返回值中的额外(双)数组字段
【发布时间】:2014-05-23 01:15:36
【问题描述】:

我正在使用我以前没有使用过的 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 mysql arrays pdo


    【解决方案1】:

    PHP 库可能将 PDO::FETCH_BOTH 设置为结果。如果您不想在数组中设置额外的键,则需要将其更改为 PDO::FETCH_ASSOC。大多数库允许您在不修改代码的情况下更改它。您将不得不阅读相关文档。

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

    【讨论】:

    • 谢谢;做到了! $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);去掉了多余的行。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-03
      • 1970-01-01
      • 1970-01-01
      • 2015-08-26
      • 2012-11-21
      • 1970-01-01
      • 2014-05-18
      相关资源
      最近更新 更多