我有下面的PHP脚本来更新数据库中的blog view,
<?php include('header.php'); ?>
<?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)) {
?>
<div class="article-blog-indiv">
<?php
echo '<h1>'. $row['blog_title'] .'</h1>';
echo '<p>'. $row['blog_body'] .'</p>';
?>
</div>
<?php
}
?>
<?php include('footer.php'); ?>下面这一行代码实际上更新了我的数据库中的视图字段:
mysql_query("UPDATE tinyblog SET views = views + 1 WHERE id = {$article_id}" , $con );现在,这一行代码似乎无法工作,因为每次我返回并签入phpmyadmin时,我都会看到视图字段仍然是0,但是当我直接插入下面的语句来测试我的phpmyadmin时:
mysql_query("UPDATE tinyblog SET views = views + 1 WHERE id = 1);我在视图字段中看到一个增量,为什么会发生这种情况??
发布于 2016-11-13 11:57:07
一些需要解决的问题。首先,当您使用mysqli或PDO时,您正在使用mysql。其次,您使用的是post数据,根本没有转义。第三,您不需要这个选择和更新。你可以在一条语句中做到这一点。
$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,但它本来可以改为?。
然后,在执行查询时,需要通过传递参数来填充丢失的位。这就是我们在使用array(":article"=>$article_id)的最后一步所做的
因为它是一个命名的参数,所以我们使用一个关联数组。或者,如果您首先调用了bindParam,则可以在没有任何参数的情况下调用execute。
发布于 2016-11-13 11:59:21
除了您已经收到的关于mysql_函数、鲍比桌 (可能很快就会得到)等方面的所有注释之外,注意在运行查询之前选择了db :
mysql_query("UPDATE tinyblog SET views = views + 1 WHERE id = {$article_id}" , $con );
mysql_select_db('tinyblog');https://stackoverflow.com/questions/40573476
复制相似问题