1

插入数据库时​​出现错误。

代码:

dbquery("INSERT INTO site_news_comments (articleid,title,short,comment,timestamp,userid,main,type,topstory) VALUES ($article,'".clean($commentss['title'])."','','".mysql_real_escape_string($_POST['comment'])."',current_timestamp,'".USER_ID."','0','".$commentss['type']."','')");

忽略 dbquery,与 mysql_query 完全相同。

我收到的错误是:

 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 ''title','short','

不知道为什么会抛出这个错误!

4

4 回答 4

2

编辑
我第一次读得太快了;该错误似乎不在列列表中,它看起来像在值列表中。查询可能出现语法错误的唯一地方是 if$article为空(或未清理的数据,例如非数字)。尝试在查询中添加引号和/或验证它至少具有默认值:

$article = (empty($article) || !is_numeric($article)) ? 0 : $article;
dbquery("... VALUES ('".$article."', '".clean($commentss['title'])."', '', '".mysql_real_escape_string($_POST['comment'])."', current_timestamp, '".USER_ID."', '0', '".$commentss['type']."', '')");

原始答案

MySQL 使用了一个列表reserved words,如果将它们用于列名,则必须使用反引号将它们转义。

尝试更新所有这些以修复:

dbquery("INSERT INTO site_news_comments (`articleid`, `title`, `short`, `comment`, `timestamp`, `userid`, `main`, `type`, `topstory`) VALUES ...
于 2012-10-04T03:22:22.670 回答
2

教人如何钓鱼。

如果查询失败,您应该做的第一件事是回显您将要发送的查询:

$sql = "INSERT INTO site_news_comments (articleid,title,short,comment,timestamp,userid,main,type,topstory) VALUES ($article,'".clean($commentss['title'])."','','".mysql_real_escape_string($_POST['comment'])."',current_timestamp,'".USER_ID."','0','".$commentss['type']."','')";

echo $sql;

最终查询出了什么问题通常很明显。特别注意查询中的动态内容,通常围绕 MySQL 抱怨的区域。

如果这看起来还可以,那么您寻找可能需要转义的单词,例如reserved words

结论

在查看了代码 mysql 之后,我不得不得出结论,问题出在哪里$article,它会导致您的查询出现问题。您可能也应该逃避它,以防万一:)

推荐

您应该了解 PDO / mysqli 并使用准备好的语句:

// PDO example
$stmt = $db->prepare('INSERT INTO site_news_comments (articleid, title, short, comment, timestamp, userid, main, type, topstory) VALUES (:article, :title, :short, :comment, CURRENT_TIMESTAMP, :user, :main, :type, :topstory)');
$stmt->execute(array(
    ':article' => $article,
    ':title' => $commentss['title'],
    ':short' => '',
    ':comment' => $_POST['comment'],
    ':user' => USER_ID,
    ':main' => 0,
    ':type' => $commentss['type'],
    ':topstory' => '',
));
于 2012-10-04T03:29:08.690 回答
0

谢谢你们的帮助!但是我解决了这个问题!

问题的原因似乎是“URL”。网址是

新闻/1/&page=2

所以当我插入 $article 时,它​​是 '1/',这是因为它认为 ID 是 1/ ,而不是 1 因为 URL。

所以我刚刚将其更改为

新闻/1&page=2

谢谢!

于 2012-10-04T03:41:10.307 回答
0
//change this line :
dbquery("INSERT INTO site_news_comments (articleid,title,short,comment,timestamp,userid,main,type,topstory) VALUES ($article,'".clean($commentss['title'])."','','".mysql_real_escape_string($_POST['comment'])."',current_timestamp,'".USER_ID."','0','".$commentss['type']."','')");

//to this : (surround $articleid with single quote)
dbquery("INSERT INTO site_news_comments (articleid,title,short,comment,timestamp,userid,main,type,topstory) VALUES ('".$article."','".clean($commentss['title'])."','','".mysql_real_escape_string($_POST['comment'])."',current_timestamp,'".USER_ID."','0','".$commentss['type']."','')");
于 2012-10-04T03:59:05.860 回答