我有以下PHP脚本来更新我的数据库中的博客视图,
$article_id = $_POST['article'];
// echo $article_id;
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = 'password';
$con = mysql_connect($dbhost, $dbuser , $dbpass);
$sql = 'SELECT id,blog_title, blog_body, views FROM tinyblog where id="'. $article_id .'" ';
// UPDATE VIEWS.
mysql_query("UPDATE tinyblog SET views = views + 1 WHERE id = {$article_id}" , $con );
mysql_select_db('tinyblog');
$retval = mysql_query( $sql, $con );
if(! $retval ) {
die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
?>
echo '
'. $row['blog_title'] .'
';echo '
'. $row['blog_body'] .'
';?>
}
?>
以下代码行实际更新了我的数据库中的views字段:
mysql_query("UPDATE tinyblog SET views = views + 1 WHERE id = {$article_id}" , $con );
现在这行代码似乎不起作用,因为每次我回去检查phpmyadmin时,我看到views字段仍为0,但是当我直接插入以下语句来测试我的phpmyadmin时:
mysql_query("UPDATE tinyblog SET views = views + 1 WHERE id = 1);
我看到了视野领域的增量,为什么会发生这种情况?
解决方法:
一些需要修复的事情.首先,当你应该使用mysqli或PDO时,你正在使用mysql.其次,您使用的是帖子数据而根本没有任何转义.第三,您不需要此选择和更新.您可以在一个声明中完成.
$query = "UPDATE tinyblog SET views = views + 1 WHERE id = (SELECT id FROM tinyblog where id=:article)"
$db = new PDO('mysql:host=localhost;dbname=mydb', 'username', 'password');
$stmt = $db->prepare($query);
$stmt->execute(array(":article"=>$article_id));
我们在这里做的是用一个占位符创建一份准备好的声明.我们把它命名为:文章,但它本可以保留为?代替.
然后在执行查询时,您需要通过传入参数来填充缺失的位.这就是我们在数组的最后一步中所做的事情(“:article”=> $article_id)
由于它是一个命名参数,我们使用一个关联数组.或者,如果您先调用bindParam,则可以在没有任何参数的情况下调用execute.
标签:php,mysql,phpmyadmin
来源: https://codeday.me/bug/20190929/1832904.html