我目前正在开发一个博客系统.在大多数情况下,我已完成博客,只需创建脚本以允许用户将评论发布到每个博客.我的PHP选择代码出现了错误
检查与MySQL服务器版本对应的手册,以便在第1行的"DESC WHERE blogID = 6"附近使用正确的语法.
我的SQL语句的完整代码是:
SELECT commentID, blogID FROM blog_comments
ORDER BY commentID LIMIT 1 DESC WHERE blogID = '.$row['postID'];`
Run Code Online (Sandbox Code Playgroud)
我知道这个当前语句容易受到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
Run Code Online (Sandbox Code Playgroud)
WHERE选择后移动案例:
'SELECT commentID, blogID FROM blog_comments
WHERE blogID = '.$row['postID'].' ORDER BY commentID DESC LIMIT 1'
Run Code Online (Sandbox Code Playgroud)
为防止SQL注入使用PDO和准备语句:(http://php.net/manual/en/pdo.prepared-statements.php).