PHP-MySQLi准备语句:未知的“ max”函数(错误1630)

时间:2018-12-27 18:04:37

标签: php mysqli prepared-statement

在准备要在数据库中查询的简单语句时出现错误。这是一个非常简单的过程。据说功能max()不存在。这是一个简单的查询:

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

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

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

我可以直接在数据库(MariaDB 10.1.29)上执行此查询,而不会出现任何问题-因为表仍然为空,因此得到“ 1”。

但是当我通过自己的PHP类调用此语句时,会出现此错误。所有其他语句的准备和执行没有任何问题-带有或不带有参数。

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

1 个答案:

答案 0 :(得分:1)

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

  

默认情况下,函数名称和其后的括号之间必须没有空格。这有助于MySQL解析器区分函数调用和对与函数名称相同的表或列的引用。

不过,该要求似乎并没有得到一致实施。似乎只有在使用聚合函数时才真正重要。

因此将您的查询更改为:

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