【问题标题】:PHP - MySQLi Prepared Statement: unknown "max" function (Error 1630)PHP - MySQLi 准备好的语句:未知的“max”函数(错误 1630)
【发布时间】:2018-12-28 02:10:50
【问题描述】:

准备要在我的数据库上查询的简单语句时出现错误。这是一个很简单的。据称功能max()不存在。这是简单的查询:

SELECT coalesce ( max ( p_order ), 0 ) + 1 AS new FROM pages

它没有要绑定的参数(但我使用自己的类来管理我的查询,因此总是使用准备好的语句)。

在准备语句时,我从数据库中收到以下错误:“FUNCTION fa_cms.max 不存在。请检查参考手册中的“函数名称解析和解析”部分”。密码是 1630。

我可以直接在数据库 (MariaDB 10.1.29) 上执行此查询,没有任何问题 - 并得到“1”,因为表仍然是空的。

但是当我通过我自己的 PHP 类调用这个语句时,我得到了这个错误。所有其他语句的准备和执行都没有任何问题 - 有或没有参数。

max() 聚合函数有什么特别之处吗?

【问题讨论】:

  • 去掉max(之间的空格。
  • @MartinZeitler 不,不是。这是一个关键字,但不是保留的。后面没有(R)
  • @Barmar 当仅绑定语句失败时,它仍然可能是列名,这可能需要反引号 `new` - 甚至是正确的名称。
  • 如果它需要反引号,它将一直需要它们,而不仅仅是在绑定时。我的猜测是,他手动运行查询时使用的间距与将查询放入 PHP 时不同。

标签: php mysqli prepared-statement


【解决方案1】:

问题是max( 之间的空格。来自documentation

默认情况下,函数名和后面的括号之间不能有空格。这有助于 MySQL 解析器区分函数调用和对碰巧与函数同名的表或列的引用。

不过,这一要求似乎并没有得到贯彻执行。似乎只有在使用聚合函数时才真正重要。

所以将您的查询更改为:

SELECT coalesce(max(p_order), 0) + 1 AS new FROM pages

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    • 1970-01-01
    • 2016-07-22
    • 1970-01-01
    相关资源
    最近更新 更多