我的mysql查询出错,尽管看起来很好

我的mysql查询出错,尽管看起来很好,mysql,Mysql,我有这个疑问 mysql_query("INSERT into reviews VALUES(0,$pid,$id,'new')") or die(mysql_error()); 它似乎给出了一个错误 “您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以了解第1行“new”(新)附近要使用的正确语法” 虽然看起来很好,但数据库表结构是: `id` int(11) NOT NULL AUTO_INCREMENT, `proposalid` int(11) NOT NU

我有这个疑问

 mysql_query("INSERT into reviews VALUES(0,$pid,$id,'new')") or die(mysql_error()); 
它似乎给出了一个错误

“您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以了解第1行“new”(新)附近要使用的正确语法”

虽然看起来很好,但数据库表结构是:

 `id` int(11) NOT NULL AUTO_INCREMENT,
  `proposalid` int(11) NOT NULL,
  `reviewerid` int(11) NOT NULL,
  `status` enum('approved','declined','noresponse','new') NOT NULL DEFAULT 'new',
  PRIMARY KEY (`id`);

似乎没有什么问题,但为什么会出现错误?

您是否尝试过对自动递增使用
默认值而不是0,或者显式声明列
插入到审阅(proposalid、reviewerid、status)值($pid、$id、'new'))

$id
可能导致错误的引号引发错误

比如说,

$pid = "6";
$id = "5'";
将导致:

INSERT into reviews VALUES(0,6,5','new')
制作
INSERT
语句时,还应使用列列表。由于
new
status
列的默认值,因此可以将其全部排除(以及排除自动递增主键):


如果
$id
$pid
是用户输入,则需要使用准备好的语句。此外,您正在使用的API(
mysql\uUcode>)已被弃用
PDO
mysqli\uucode>是替换项,它们都允许准备好的语句对输入进行清理。

由于ENUM
status
的默认值设置为“new”,您是否可以尝试插入,例如:

mysql_query("INSERT into reviews (`proposalid`, `reviewrid`) VALUES($pid, $id);") or die(mysql_error());

在此之后,可能会更多地讨论错误。

$pid和$id解决了什么问题?问题可能不在new上,但$id可能为null?它在函数调用的小提琴中工作良好。公共函数assign_reviewer($pid,$id)除此之外,您知道只要有一行,这个查询就会失败,对吗?您应该定义字段和值
插入到评审(proposalid,reviewerid)值($pid,$id)
-关闭自动增量,不必担心状态,因为刚才的默认值是newtried。现在,它在第1行给出了错误“…正确语法以使用near”),“当前
$pid
$id
的值是多少?我倾向于同意上面的答案,即其中一个可能有错误的引号在其中徘徊,破坏了格式。添加反勾号和单引号似乎成功了,以下是有效的查询。谢谢(“插入到评论(
proposalid
reviewerid
)值(“$id”,“$pid”))@JamieAnacleto正如您所知,这不是正确的方法。
$pid
和$id`需要在此处转义。
mysql_query("INSERT into reviews (`proposalid`, `reviewrid`) VALUES($pid, $id);") or die(mysql_error());