运行MySQL命令时出现此错误:
您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以获得正确的语法,以便在'' champions'附近使用。在哪里' id' = $' id''在第1行
如何解决此错误?这是什么意思?
答案 0 :(得分:1)
三件事。
$
。所以将$'id'
更改为'$id'
'id'
是文字字符串'id'
,而不是列id
的值,因此请删除单引号champions
是一张表,你需要摆脱周围的单引号答案 1 :(得分:1)
如何解决?更正语句,使其成为有效的SQL语法。
错误是什么意思?该错误意味着MySQL认为它收到的语句是无效的SQL。
通常,错误表示MySQL认为语句从有效变为无效的语句中的点。在这种情况下,错误显示:
champions' WHERE 'id' = $'id
当MySQL到达那个部分时,它就像塑料一样?和我无法用这个做什么 ......
我认为这里最大的问题是您可能将列名括在单引号中。不要这样做。
单引号围绕字符串文字(值);如果需要转义标识符,请将其括在反引号中。
... FROM t WHERE t.`lastname` = 'Smith'
从显示的语句部分看,您可能认为id
是列名,而不是字符串文字。但MySQL报告的问题早于声明,而不是。
可能,它认为紧接在 champions
之前的单引号标记了字符串文字的结尾。 (或者,在champions'
之前应该有一个单引号但是它已经丢失了。如果没有看到提交的SQL语句,就无法确定实际问题是什么。我们只是在猜测。
要在之前调用此echo
或vardump
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。如果这不能解决您的问题,请提供更多详细信息,即整个查询。