插入数据库时出错。
代码:
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','
不知道为什么会抛出这个错误!
答案 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']."','')");