PHP,MYSQL创建博客评论系统

时间:2015-07-21 05:21:31

标签: php mysql

我目前正致力于开发博客系统。在大多数情况下,我已完成博客,只需创建脚本以允许用户将评论发布到每个博客。我的PHP选择代码出现了

的错误
  

检查与您的MySQL服务器版本相对应的手册,以便在#DES; DESC WHERE blogID = 6'使用正确的语法。在第1行。

我的SQL语句的完整代码是:

SELECT commentID, blogID FROM blog_comments   
ORDER BY commentID LIMIT 1 DESC WHERE blogID = '.$row['postID'];`

我知道这个当前语句容易受到SQL注入的影响,并尝试使用令牌来确保我受到保护。

$row['postiD']来自之前运行的SQL语句,用于显示实际的博客帖子。这是打算在主页上,我不需要显示实际的评论文本,而只是显示特定博客上的评论数量。如果需要,我可以发布完整的代码。

好的,我更新了我的SQL语句并解决了这个问题。但是,页面未显示commentID号,$e未执行,我的apache2日志中也没有出现任何错误。

$query = "SELECT commentID, blogID FROM blog_comments WHERE blogID ':postid' ORDER BY commentID DESC LIMIT 1";
$query_params = array(':postid' => $row['postID']);
try {
    $stmt = $db->prepare($query);
    $result = $stmt->execute($query_params);
}
catch(PDOException $e)
{
    // dont echo $e on production site
    die($e->getMessage());
}
$rows = $stmt->fetchAll();
?>
<?php foreach($rows as $row): ?>
    <?php echo $row['commentID']; ?>
<?php endforeach; ?>
comments

5 个答案:

答案 0 :(得分:6)

在选择:

之后移动WHERE个案
'SELECT commentID, blogID FROM blog_comments 
 WHERE blogID = '.$row['postID'].' ORDER BY commentID DESC LIMIT 1'

要防止SQL注入,请使用PDO和预准备语句:(http://php.net/manual/en/pdo.prepared-statements.php)。

答案 1 :(得分:1)

您真的需要了解我们如何在SQL中创建select ,order, where and limit语句

您的查询将是

"SELECT `commentID`, `blogID` FROM `blog_comments`  WHERE `blogID` = '".$row['postID']."' ORDER BY `commentID` DESC LIMIT 1" ;

阅读Tutorial

另请阅读How can I prevent SQL-injection

答案 2 :(得分:1)

您写错了查询

'SELECT commentID, blogID FROM blog_comments WHERE blogID = '.$row['postID'].' ORDER BY commentID DESC LIMIT 1';

答案 3 :(得分:1)

您的查询元素序列似乎有误,请按照以下查询顺序进行操作:

'SELECT commentID, blogID FROM blog_comments WHERE blogID = '.$row['postID'].' ORDER BY commentID DESC LIMIT 1';

需要设置 ORDER BY&amp;在 WHERE 子句之后限制

答案 4 :(得分:-1)

SELECT `commentID`, `blogID` FROM `blog_comments` WHERE blogID = $row['postID'] order by `commentID` DESC limit 1