已经学习php 3周了,我发现自己遇到了一个没有意义的简单错误:
我看不出这个代码出了什么问题。
有人能告诉我为什么会发生这种事吗。
这是一个简单的插入并设置sql查询,如下所示:
代码:
$insertresults = "UPDATE usage SET message='".$message."',islive='".$islive."' WHERE id=1";
$insertresults_doit = mysql_query($insertresults) OR die(mysql_error());
我得到的错误是:
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 'usage SET message='hello',islive='0' WHERE id=1' at line 1
正如您所看到的,变量是正确的,我所看到的sql字符串也是正确的。
感谢
您的表名usage
实际上是MySQL中的一个保留字。你必须在报价中加上反勾号:
UPDATE `usage` SET ...
$insertresults = "UPDATE usage SET message=$message,islive=$islive WHERE id=1";
$insertresults_doit = mysql_query($insertresults) OR die(mysql_error());
你不需要像以前那样包装变量,试试看:)看看这个错误,就会发现列名周围有额外的'
——你不希望这样。
尝试从$islive 中删除引号
检查变量值中是否有一个引号。在sql语句中使用之前最好先对其进行转义
$message=addslashes($message);
$islive=addslashes($islive);
$insertresults = "UPDATE usage SET message='".$message."',islive='".$islive."' WHERE id=1";
$insertresults_doit = mysql_query($insertresults) OR die(mysql_error());
假设这两列都是varchar类型
"更新用法SET message='{$message}',islive='{$islive}'WHERE id=1"–Nick 21分钟前
@尼克,如果我使用大括号,我仍然会得到完全相同的错误,即使我不使用"on int",消息也是一条消息,islive是0或1Robert 6分钟前
@罗伯特,你确定$message和$islive已经被正确地逃脱了吗?使用:addslashes()或mysql_real_eescape_string()
移动到应答(增长)