-1

我真的把头发拉出来了。我在我的自建 php 应用程序上有一个简单的评论部分,如果我捕获 $_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">';
}

我的 MySQL 数据库字段的名称完全相同:messageid (auto_increment)、tid(int11)、from(varchar255)、contact(varchar255)、seen(int3)、message(text) 和 date(timestamp/CURRENT_TIMESTAMP)。

如我所见,使用“index.php?r=777”执行上述页面应该用新行填充我的 MySQL:

messageid = (AUTO_INCREMENT)
toid = 777
from = TESTUSER
contact = CONTACTINFO
seen = 0
message = MESSAGE
date = 2013-01-17 11:50:01

相反,我收到以下错误:

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

与“error_reporting(E_ALL)”显示相同的错误。

我已经研究了好几天了,我就是找不到错误……也许我是盲人,错过了逗号或结束标签之类的东西。有任何想法吗?

4

6 回答 6

5

它是因为您使用保留字(从和日期)作为列名。

用`包裹它们

IE:

INSERT INTO eis_inbox (`messageid`, `toid`, `from`, `contact`, `seen`, `message`, `date`)
于 2013-01-17T10:59:47.583 回答
2

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

除此之外,值的括号没有关闭。

用这个。我希望这会正常工作。

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

谢谢。

于 2013-01-17T11:00:28.190 回答
1

你不能直接在mysql中使用保留字

from 是保留字

简短的例子

INSERT INTO eis_inbox (messageid, from) VALUES (1,2);

-- 是错误的查询

INSERT INTO eis_inbox (messageid, `from`) VALUES (1,2);

-- 是正确的查询

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

于 2013-01-17T11:01:13.970 回答
1

这里有一些语法错误:

  • 生成的查询末尾缺少括号。
  • fromdate是保留关键字,将它们括在`.
  • seenandtoid不是varchar字段,因此它们的值不应包含在'.

尝试 :

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

警告:这很容易受到 SQL 注入的攻击。不要使用mysql_*命令,而是尝试PDOou mysqli。准备好的陈述将有助于避免它们。

于 2013-01-17T11:01:26.557 回答
0

您缺少值的结束标记,并且 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 ......

于 2013-01-17T11:00:12.943 回答
0

你少了一个括号

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());
于 2013-01-17T11:02:43.007 回答