【问题标题】:Order by field SQL state exception 1064按字段排序 SQL 状态异常 1064
【发布时间】:2014-03-26 18:59:59
【问题描述】:

我一直在努力

exception 'PDOException' with message 'SQLSTATE[42000]: 
Syntax error or access violation: 1064 
You have an error in your SQL syntax; check the manual that corresponds to your 
MySQL server version for the right syntax to use near 
'(questionid, 'sfname' , 'slname' , 'school' , 'grade' , 'addr' , 'city' , 'state' at line 1' 

来自此声明:

$stmt = $db->prepare('SELECT * FROM event_responses WHERE eventid= :eventid ORDER BY userid DESC, field (questionid, \''.implode("' , '", $columns1).'\')');

我在里面附和了这个声明,我觉得很好:

SELECT *
FROM event_responses
WHERE eventid= :eventid
ORDER BY userid DESC,
      field (questionid, 'sfname' , 'slname' , 'school' , 'grade' , 'addr' , 'city' , 'state' , 'zip' , 'semail' , 'sphone' , 'pfname' , 'plname' , 'pemail' , 'pphone' , 'noattend' , 'regid' , 'submitDate' , 'attended' , 'regmethod')

为什么会这样?

【问题讨论】:

    标签: php mysql sql pdo sql-order-by


    【解决方案1】:

    你在 MySQL 中遇到了一个奇怪的问题:

    注意

    默认情况下,函数名和函数名之间不能有空格 后面的括号。这有助于 MySQL 解析器区分 在函数调用和对发生的表或列的引用之间 与函数具有相同的名称。但是,函数周围的空间 参数是允许的。

    去掉field后面的空格,所以表达式为:

    SELECT *
    FROM event_responses
    WHERE eventid = :eventid
    ORDER BY userid DESC,
             field(questionid, 'sfname' , 'slname' , 'school' , 'grade' , 'addr' , 'city' , 'state' , 'zip' , 'semail' , 'sphone' , 'pfname' , 'plname' , 'pemail' , 'pphone' , 'noattend' , 'regid' , 'submitDate' , 'attended' , 'regmethod')
    

    【讨论】:

    • 就个人而言,我从不在任何函数中使用空格(这样),无论是 PHP/SQL 等(称之为本能吗?)绝对值得+1 和一些 ;-)
    • @Gordon Linoff 我无法重新创建这个?它通过 SQLFiddle 和本地安装的 MySQL 进行了尝试,但它没有给我任何问题。 sqlfiddle.com/#!2/d6830/2我是不是搞错了?
    • @Mr.Radical 。 . .有趣的。我现在附近没有 MySQL,所以我无法测试它,除非在 SQL Fiddle(它不会产生问题)。我怀疑删除空格可以解决问题,因为答案已被接受。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-28
    • 2020-06-17
    相关资源
    最近更新 更多