首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误我的mysql查询,虽然它看起来很好

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

Stack Overflow用户
提问于 2013-05-22 03:03:39
回答 3查看 52关注 0票数 0

我有这样的疑问

代码语言:javascript
复制
 mysql_query("INSERT into reviews VALUES(0,$pid,$id,'new')") or die(mysql_error()); 

好像出了点差错

“您的SQL语法有错误;请检查与您的MySQL服务器版本对应的手册,以便在第1行使用接近‘new’的正确语法。”

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

代码语言:javascript
复制
 `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`);

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-22 03:11:53

由于您的默认值ENUM status设置为'new',您可以尝试插入如下:

代码语言:javascript
复制
mysql_query("INSERT into reviews (`proposalid`, `reviewrid`) VALUES($pid, $id);") or die(mysql_error());

也许在这之后,错误会更多地被说出来。

票数 0
EN

Stack Overflow用户

发布于 2013-05-22 03:09:01

您是否尝试过使用DEFAULT作为自动增量而不是0,或者显式声明列INSERT into reviews (proposalid, reviewerid, status) VALUES($pid, $id, 'new')

票数 0
EN

Stack Overflow用户

发布于 2013-05-22 03:11:01

$id的值可能导致错误的引号抛出错误。

例如,

代码语言:javascript
复制
$pid = "6";
$id = "5'";

会导致:

代码语言:javascript
复制
INSERT into reviews VALUES(0,6,5','new')

在创建INSERT语句时,还应该使用列列表。由于newstatus列的缺省值,所以可以完全排除它(以及排除自动增量主键):

代码语言:javascript
复制
INSERT into reviews (proposalid, reviewerid) VALUES($id, $pid)

如果$id$pid是用户输入,那么您需要使用准备好的语句。另外,您正在使用的API (mysql_)也被废弃了。PDOmysqli_是替代者,它们都允许准备好的语句对输入进行清理。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16682811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档