我在桌面上使用XAMPP(Apache / 2.2.17(Win32)mod_ssl / 2.2.17 OpenSSL / 0.9.8o PHP / 5.3.4 mod_perl / 2.0.4 Perl / v5.10.1 MySQL客户端版本:mysqlnd 5.0。 7-dev - 091210 - $ Revision:304625 $)
我有一个MYSQL SELECT语句在我的桌面应用程序中运行正常,甚至可以在phpMyadmin中运行并且工作正常。
当我将我的应用程序移动到我的Web主机时,该语句失败。我的Web主机使用MySQL客户端版本运行Apache:5.0.92 当我在我的网络主机上使用phpMyadmin时,它给了我错误:
FUNCTION nwilin5_eib_jtest.FIELD does not exist
以下是声明:
SELECT a.*, p.name as parent, p.id as parentid, c.name as cat
, c.id as catid,u.username as user, f.itemid as featured
, f.payment_date as FeaturedPayDate, f.limit_date as FeaturedExpDate
FROM jos_classifiedsredux_ads as a
LEFT JOIN jos_users as u
ON a.userid = u.id
LEFT JOIN jos_classifiedsredux_pay4featuredad as f
ON a.id = f.itemid
INNER JOIN jos_classifiedsredux_categories as c
ON a.category = c.id
LEFT JOIN jos_classifiedsredux_categories as p
ON c.parent = p.id
WHERE a.published = 1
ORDER BY FIELD (a.id, 137, 226, 134, 135, 220, 240, 233, 219, 146, 138, 136, 133)
答案 0 :(得分:1)
您需要删除FIELD
中的(
和ORDER BY
之间的空格...
变化:
ORDER BY FIELD (a.id, 137, 226, 134, 135, 220...
要:
ORDER BY FIELD(a.id, 137, 226, 134, 135, 220...
为什么这很重要?
您的测试服务器和生产服务器可能具有IGNORE_SPACE
mode... which permits a space between the function call (FIELD
), and the parameter list when enabled.
允许函数名称与“(”字符)之间的空格 导致内置函数名称被视为保留字。作为一个 结果,必须引用与函数名称相同的标识符 如第8.2节“架构对象名称”中所述。例如, 因为有一个COUNT()函数,使用count作为表名 在以下语句中导致错误:
mysql> CREATE TABLE count (i INT); ERROR 1064 (42000): You have an error in your SQL syntax The table name should be quoted: mysql> CREATE TABLE `count` (i INT); Query OK, 0 rows affected (0.00 sec)
IGNORE_SPACE SQL模式适用于内置函数,而不适用于 用户定义的函数或存储的函数。它总是允许的 在UDF或存储的函数名之后有空格,不管是什么 是否启用了IGNORE_SPACE。
答案 1 :(得分:0)
快速修复 - 将ORDER BY更改为只是按顺序a.id,...,它应该可以正常工作。