错误我的mysql查询虽然看起来很好

时间:2013-05-22 03:03:39

标签: mysql

我有这个查询

 mysql_query("INSERT into reviews VALUES(0,$pid,$id,'new')") or die(mysql_error()); 

似乎给出了错误

  

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

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

 `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`);

似乎没有错,但为什么会出错?

3 个答案:

答案 0 :(得分:0)

您是否尝试使用DEFAULT进行自动增量而非0,或明确声明列INSERT into reviews (proposalid, reviewerid, status) VALUES($pid, $id, 'new')

答案 1 :(得分:0)

$id的值可能导致错误引用以引发错误。

例如,

$pid = "6";
$id = "5'";

会导致:

INSERT into reviews VALUES(0,6,5','new')

在制作INSERT语句时,您还应该使用列列表。由于newstatus列的默认值,因此您可以完全排除它(以及排除自动增量主键):

INSERT into reviews (proposalid, reviewerid) VALUES($id, $pid)

如果$id$pid是用户输入,那么您需要使用预准备语句。此外,您不再使用您正在使用的API(mysql_)。 PDOmysqli_是替代品,并且都允许准备好的陈述来清理输入。

答案 2 :(得分:0)

由于ENUM status的默认值设置为“新”,您可以尝试INSERT,例如:

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

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