【问题标题】:PDOStatement returns a string: Is this a PHP Bug?PDOStatement 返回一个字符串:这是一个 PHP 错误吗?
【发布时间】:2015-12-20 20:01:00
【问题描述】:

我正在考虑提交一份 PHP 错误报告。我的问题是:这是一个 PHP 错误吗?

我正在寻找“是”/“否”的答案来帮助我决定是否应该提交错误报告。

问题是 PHP7 中 SQLite 的 PDOStatement::fetch(PDO:FETCH_NUM) 在它应该返回一个数组时返回一个字符串。

2008 年,PHP 拒绝了关于错误报告 #44341 的 MySQL 驱动程序的类似报告

https://bugs.php.net/bug.php?id=44341

在#44341 报告中,PHP 程序员说这不是 PHP 错误,而是 MySQL 驱动程序的问题。 MySQL 解决了这个问题。

这是我的论点,这是一个 PHP 错误。

SQLite 是一个公共领域、基于标准的“零配置”数据库,开发人员可以将其嵌入到他们的产品中。

SQLite 没有驱动程序。根据定义,SQLite 是一个嵌入式数据库。

PDO_SQLITE 是由 PHP 创建的产品,它“嵌入”了 SQLite 作为驱动程序。参见 PHP 手册 php.net/manual/en/ref.pdo-sqlite.php

深入挖掘。看来 PDOStatement::fetch() 返回字符串而不是数组的原因是 SQLite 是基于标准的程序。 SQL 标准将数据输出为字符串。

MySQL 驱动程序将 PDO 传递给用户的数组交给 PHP。

PDO 失败的原因是 SQLite 驱动程序根据 SQL 标准传递了一个字符串。 PHP 的 PDO 产品似乎针对来自 MySQL 驱动程序的非标准输出进行了优化。

我认为我必须是 PHP Bug 的问题有几个原因:

1) SQLite 是一个嵌入式数据库。它没有驱动程序。由嵌入 SQLite 的公司决定是否让 SQLite 工作。

2) PHP 宣传一种名为 PDO_SQLITE 的产品。这个产品意味着他们已经接受了他们已经承担了让 SQLite 与他们的产品一起工作的责任。

(SQLite 不是客户端/服务器数据库。它是一个嵌入式数据库,使其完全不同。)

3) SQLite 输出基于 SQL 标准。错误报告 #44341 告诉我 PDO 依赖于专有第三方驱动程序的输出。

我对 StackOverflow 的问题是:这是一个 PHP 错误,还是我不正常?

顺便说一句,我要报告的错误不仅仅是 PDOStatement::fetch() 的 SQLite 实现返回一个字符串。

我要报告的错误是 PHP 似乎依赖于 MySQL 驱动程序,MySQL 现在是 ORACLE 的全资部门,我想避免对 ORACLE 的依赖。

我对 StackOverflow 的问题是:我的论点有意义吗?

如果我发布错误报告,我需要明确说明为什么 PHP 拒绝关于 MySQL 的报告 #44341 的原因不适用于 SQLite。

以下链接显示错误。

http://yintercept.com/resources/new.php

【问题讨论】:

    标签: php pdo sqlite


    【解决方案1】:

    我决定提交错误报告,尽管我怀疑会立即被解雇。对专有驱动程序的依赖是开源世界中的一个错误。

    https://bugs.php.net/bug.php?id=71185

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-09
      • 2017-09-19
      • 1970-01-01
      相关资源
      最近更新 更多