mysql语句在我的桌面上运行但在我的Web主机上失败

时间:2012-03-29 21:03:12

标签: mysql sql

我在桌面上使用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)

2 个答案:

答案 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,...,它应该可以正常工作。

相关问题