按字段排序SQL状态异常1064

gta*_*004 3 php mysql sql pdo sql-order-by

我一直在

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' 
Run Code Online (Sandbox Code Playgroud)

从这个声明:

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

我回应了里面的声明,它对我来说很好看:

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')
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

Gor*_*off 11

你在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')
Run Code Online (Sandbox Code Playgroud)