Php 为什么Sqlite3::prepare()在我的更新中抛出错误。。。FROM语句,尽管语法有效?
我有一个SQL语句,在中编写时运行良好PHP@5.6,但在升级到7.3.24(macOS在Big Sur上默认)的过程中,此准备好的语句现在失败了:Php 为什么Sqlite3::prepare()在我的更新中抛出错误。。。FROM语句,尽管语法有效?,php,sqlite,pdo,Php,Sqlite,Pdo,我有一个SQL语句,在中编写时运行良好PHP@5.6,但在升级到7.3.24(macOS在Big Sur上默认)的过程中,此准备好的语句现在失败了: UPDATE results SET comment = :comment FROM ( SELECT expected , status FROM results
UPDATE results
SET comment = :comment
FROM (
SELECT expected
, status
FROM results
WHERE report_id = :prevReportID
) AS s
WHERE results.report_id = :workingReportID
AND results.status = s.status
我已验证sqlite将在命令行上接受此语法,但在调用prepare
时失败:
SQLite3::prepare(): Unable to prepare
statement: 1, near \"FROM\": syntax error",
"code": 2,
"file": "/Volumes/Data/web/database.php:157",
"trace": [
"{\"function\":\"{closure}\",\"args\":[2,\"SQLite3::prepare(): Unable
to prepare statement: 1, near \\\"FROM\\\": syntax
error\",\"/Volumes/Data/web/database.php\",157,{\"sql\":\"UPDATE
results \\n SET comment = :comment \\n FROM (\\n
SELECT expected\\n , status\\n
FROM results\\n WHERE report_id =
:prevReportID\\n ) AS s\\n WHERE
results.report_id = :workingReportID\\n AND results.status
= s.status\"}]}",
"/Volumes/Data/web/database.php:157",
其中database.php:157
是:
类CommonDB扩展了SQLite3
{
...
函数prepare($sql)
{
返回父::prepare($sql);
}
...
sqlite驱动程序(CLI和php中使用的)是3.35.4(来自自制)再次检查。执行
选择sqlite\u版本()
噢,lame.3.28.0。有没有办法让本机php使用更新的驱动程序?我帮不了你。但是我相信你的代码可以不用3.33.0中引入的更新…语法来编写,因为实际上你不需要这种自连接。真正的查询比这个人为的例子更复杂。Pa我所面临的问题之一是,在使用更新的sqlite驱动程序3.35的同时,使用已安装的自制PHP7.4版本会非常慢。我在查询中发现了一个在以前版本的驱动程序中没有出现的问题(查询计划是以不同的方式创建或执行的),并且一旦修改了查询,就可以使用更新版本的PHP和更新版本的sqlite驱动程序。