向MySQL发出命令时,出现错误#1064“语法错误”。
这是什么意思?
我该如何解决?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
显然,需要确定该命令违反MySQL语法的方式。这听起来似乎很难理解,但是MySQL确实在努力为我们提供帮助。我们需要做的就是……
阅读消息! MySQL的不仅告诉我们准确,语法分析器中遇到的语法错误,也使得一个建议用于固定它。例如,考虑以下SQL命令:
UPDATE my_table WHERE id=101 SET name='foo' 该命令产生以下错误消息:
ERROR 1064 (42000): 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 'WHERE id=101 SET name='foo'' at line 1
MySQL告诉我们,一切似乎都可以实现WHERE,但是随后遇到了问题。换句话说,它并不期望WHERE在那时遇到。
仅显示消息的...near '' at line...意思是意外结束了命令的结尾:也就是说,在命令结束之前应该出现其他内容。
检查命令的实际文本! 程序员通常使用编程语言创建SQL命令。例如,一个php程序可能有这样的(错误)行:
$result = $mysqli->query("UPDATE " . $tablename ."SET name='foo' WHERE id=101"); 如果您将此写成两行
$query = "UPDATE " . $tablename ."SET name='foo' WHERE id=101" $result = $mysqli->query($query); 那么您可以添加echo $query;或var_dump($query)查看查询实际是否显示
UPDATE userSET name='foo' WHERE id=101 通常,您会立即看到错误并能够解决。
服从命令! MySQL还建议我们“ 检查与我们的MySQL版本相对应的手册以使用正确的语法 ”。来做吧。
我正在使用MySQL v5.6,因此我将转向该版本的手册中的UPDATEcommand。页面上的第一件事是命令的语法(对于每个命令都是如此):
UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ... [WHERE where_condition] [ORDER BY ...] [LIMIT row_count] 该手册介绍如何解释下这句法排版和语法约定,但对我们而言这足以认识到:条款包含在方括号中[和]是可选的; 竖线|表示替代方案;和省略号...表示为简洁起见,或者可以重复前面的条款。
我们已经知道,解析器认为我们命令中的所有内容都可以在WHERE关键字之前使用,或者换句话说,直到并包括表引用。查看语法,我们看到table_reference必须在其后跟SET关键字:而在我们的命令中,实际上是WHERE关键字。这解释了为什么解析器报告此时遇到了问题。来源:stack overflow