运行命令时MySQL出错

时间:2015-06-04 04:59:27

标签: mysql

运行MySQL命令时出现此错误:

  

您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以获得正确的语法,以便在'' champions'附近使用。在哪里' id' = $' id''在第1行

如何解决此错误?这是什么意思?

3 个答案:

答案 0 :(得分:1)

三件事。

  1. MySQL不喜欢查询中的悬空$。所以将$'id'更改为'$id'
  2. 'id'是文字字符串'id',而不是列id的值,因此请删除单引号
  3. 假设champions是一张表,你需要摆脱周围的单引号

答案 1 :(得分:1)

如何解决?更正语句,使其成为有效的SQL语法。

错误是什么意思?该错误意味着MySQL认为它收到的语句是无效的SQL。

通常,错误表示MySQL认为语句从有效变为无效的语句中的点。在这种情况下,错误显示:

    champions' WHERE 'id' = $'id

当MySQL到达那个部分时,它就像塑料一样?我无法用这个做什么 ......

我认为这里最大的问题是您可能将列名括在单引号中。不要这样做。

单引号围绕字符串文字();如果需要转义标识符,请将其括在反引号中。

... FROM t WHERE t.`lastname` = 'Smith'

从显示的语句部分看,您可能认为id是列名,而不是字符串文字。但MySQL报告的问题早于声明,而不是。

可能,它认为紧接在 champions 之前的单引号标记了字符串文字的结尾。 (或者,在champions'之前应该有一个单引号但是它已经丢失了。如果没有看到提交的SQL语句,就无法确定实际问题是什么。我们只是在猜测。

要在之前调用此echovardump SQL文本,您需要将其提交到数据库,例如

$sql = "SELECT foo FROM bar WHERE fee = 'fo'";
echo "SQL=" . $sql ;  // for debugging
$db->query($sql); 

(错误中的$'id让我相信你是在动态创建一个包含PHP中SQL语句的字符串,打算让PHP评估变量$ id并在SQL文本中提供值。

希望$id不包含 0' OR '1'='1' 之类的内容。

总结:

  • 用于调试,回显包含您要提交到数据库的SQL的实际字符串

  • 使用反引号而不是标识符周围的单引号(表名,列名)

  • 在字符串文字周围使用单引号

  • 正确转义值并入SQL文本(real_escape_string

  • 必须对字符串文字中的单引号进行转义,使用两个单引号来表示单引号,例如'O''Reilly' - > O'Reilly

例如,如果你这样做:

SELECT foo FROM tab WHERE `name` = 'O'Reilly'

MySQL将会对Reilly犹豫不决。它认为有效的是 name = 'O' (列等于包含单个字符的字符串文字)。 MySQL然后从Reilly开始抛出语法错误。

这看起来像是champion'在您的查询中发生了什么。实际问题可能是缺失或不平衡的单引号,并且在声明中可能早得多。

答案 2 :(得分:-2)

这表示您的查询中有错误。你可能有一个撇号,你不需要$&id。id。它应该是$ id。如果这不能解决您的问题,请提供更多详细信息,即整个查询。