PHP MySQL在插入时出错

PHP MySQL在插入时出错,php,mysql,insert,Php,Mysql,Insert,这一次我真是太激动了。我在我的自建php应用程序上得到了一个简单的评论部分,如果我捕捉到一个$\u GET参数,我只想添加一个新行。但无论我如何构建MySQL插入请求,我都会得到一个错误 这就是我到目前为止所做的: if(isset($_GET['r'])){ $replyid = mysql_real_escape_string($_GET['r']); $sentnow = date("Y-m-d H:i:s"); mysql_query("INSERT INTO e

这一次我真是太激动了。我在我的自建php应用程序上得到了一个简单的评论部分,如果我捕捉到一个$\u GET参数,我只想添加一个新行。但无论我如何构建MySQL插入请求,我都会得到一个错误

这就是我到目前为止所做的:

if(isset($_GET['r'])){
    $replyid = mysql_real_escape_string($_GET['r']);
    $sentnow = date("Y-m-d H:i:s");
    mysql_query("INSERT INTO eis_inbox (messageid, toid, from, contact, seen, message, date) VALUES (NULL, '".$replyid."', 'TESTUSER', 'CONTACTINFO', '0', 'MESSAGE', '".$sentnow."'") or die(mysql_error());
    echo '<meta http-equiv="refresh" content="0;/messages">';
}
相反,我得到了以下错误:

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 'from, contact, seen, message, date) VALUES (NULL, '1', 'TESTUSER', 'CONTACTINFO'' at line 1
与“错误报告(E_ALL)”显示的错误相同


我已经研究了好几天了,我就是找不到错误。。。也许我是瞎子,错过了一个逗号或结束标记或什么。有什么想法吗?

这是因为您正在使用保留字(from和date)作为列名

把它们包起来``

即:


您丢失的值的结束标记和from将被保留,因此您应该将其转义。。。(在它周围使用引号应该可以做到这一点,…:

mysql_query("INSERT INTO eis_inbox (messageid, toid, from, contact, seen, message, date) VALUES (NULL, '".$replyid."', 'TESTUSER', 'CONTACTINFO', '0', 'MESSAGE', '".$sentnow."'") or die(mysql_error());
应该是

mysql_query("INSERT INTO eis_inbox (messageid, toid, 'from', contact, seen, message, date) VALUES (NULL, '".$replyid."', 'TESTUSER', 'CONTACTINFO', '0', 'MESSAGE', '".$sentnow."')") or die(mysql_error());

正如zan所提到的,不要使用mysql函数,但mysqli函数或PDO函数…

日期是mysql的关键字,您必须将其括在`符号'中。这是mysql官方文档中保留字的完整列表,以备将来使用

除此之外,值的括号不是闭合的

用这个。我希望它能很好地工作

INSERT INTO eis_inbox (`messageid`, `toid`, `from`, `contact`, `seen`, `message`, `date`) VALUES (NULL, '".$replyid."', 'TESTUSER', 'CONTACTINFO', '0', 'MESSAGE', '".$sentnow."')"

谢谢。

您不能在mysql direct中使用保留字

从是保留字

简短的例子

INSERT INTO eis_inbox (messageid, from) VALUES (1,2);
--这是一个错误的查询

INSERT INTO eis_inbox (messageid, `from`) VALUES (1,2);
--这是正确的查询


但最好避免这种情况。是MySQL官方文档中保留字的完整列表,供将来使用。

这里有一些语法错误:

  • 生成的查询末尾缺少括号
  • from
    date
    是保留关键字,请将它们括在`
  • seen
    toid
    不是
    varchar
    字段,因此它们的值不应包含在
尝试:


警告:这很容易受到SQL注入的攻击。请不要使用
mysql.*
命令,而是尝试使用ou。准备好的语句将有助于避免使用它们。

缺少括号

mysql_query("INSERT INTO eis_inbox (messageid, toid, from, contact, seen, message, date) VALUES (NULL, '".$replyid."', 'TESTUSER', 'CONTACTINFO', '0', 'MESSAGE', '".$sentnow."')") or die(mysql_error());

请不要在新代码中使用mysql_*函数。它们不再被维护,并且已被正式弃用。请改用PDO或MySQLiI了解准备好的语句。我不确定$replyid是否是数据库中的int,但如果是,则不应在其周围使用符号“”。(仅用于字符串)请确保SEED字段的数据类型为varchar,或删除其值周围的“”。插入整数时,不要用单引号将其封装。请尝试。谢谢。我知道。这是一个旧的完美工作的应用程序,需要一些维护。因此,我不想为了最新的开发而更改所有内容这就是为什么我在更新旧代码时遇到困难的原因。这完全解决了问题!多谢各位!接受这个答案!最后一个很糟糕。虽然他们当前的代码实际上不受注入攻击,但您的版本使其易受攻击。-1怎么会呢?是否正确转义了$\u?这只是一个示例。行的值都是来自各地的。只是为了更简单的问答,制作了这个例子。
INSERT INTO eis_inbox (messageid, `from`) VALUES (1,2);
mysql_query("INSERT INTO eis_inbox (messageid, toid, `from`, contact, seen, message, `date`)
VALUES (NULL, ".$replyid.", 'TESTUSER', 'CONTACTINFO', 0, 'MESSAGE', '".$sentnow."')");
mysql_query("INSERT INTO eis_inbox (messageid, toid, from, contact, seen, message, date) VALUES (NULL, '".$replyid."', 'TESTUSER', 'CONTACTINFO', '0', 'MESSAGE', '".$sentnow."')") or die(mysql_error());