【发布时间】: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。
以下链接显示错误。
【问题讨论】: