PHP SQL插入错误

时间:2012-10-04 03:18:06

标签: php sql database

插入数据库时​​出错。

代码:

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 个答案:

答案 0 :(得分:2)

修改
我第一次看得太快;该错误似乎不在列列表中,它看起来像在值列表中。查询可能出现语法错误的唯一位置是$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 ...

答案 1 :(得分: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' => '',
));

答案 2 :(得分:0)

感谢帮帮!但我解决了这个问题!

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

新闻/ 1 /&安培;页= 2

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

所以我刚把它改成了

新闻/ 1安培;页= 2

谢谢!

答案 3 :(得分: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']."','')");