【问题标题】:mysql statement works on my desktop but fails on my web hostmysql 语句在我的桌面上工作,但在我的网络主机上失败
【发布时间】:2012-04-13 13:54:23
【问题描述】:

我在我的桌面上使用 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 中运行它并且运行正常。

当我将我的应用程序移至我的网络主机时,该语句失败。我的虚拟主机使用 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)

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    您需要删除ORDER BYFIELD( 之间的空格...

    变化:

    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。

    【讨论】:

    • 哇!工作,不知道 IGNORE_SPACE 模式(我相信大多数人不知道)
    • @user1301847 很高兴成功了!如果这回答了您的问题,please mark it as the accepted answer
    【解决方案2】:

    快速修复 - 将 ORDER BY 更改为仅 ORDER BY a.id, ...,它应该可以工作。

    【讨论】:

    • 这会改变他ORDER BY的结果... OP使用FIELD硬编码a.id的顺序。
    • NAW 未能使用我创建的有序列表,仅对键 (a.id) 进行排序
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    • 2018-07-18
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多