我拥有一个图像托管网站,并使用php和mysql捕获图像视图。
我使用以下代码对视图进行计数。
include 'mysql.php';
$result = mysql_query("SELECT * FROM DB WHERE ID='$id'");
$row = mysql_fetch_array($result);
$views=$row['views'];
$query = "UPDATE DB SET views=$views+1 WHERE ID='$id'";
$result2 = mysql_query($query);
mysql_close($con);
views是mediaint(9)类型字段。
我注意到浏览量一天比一天减少。任何人都能说出问题所在并提出解决方案吗。
谢谢。
您应该使用它来更新:
$query = "UPDATE DB SET views=views+1 WHERE ID='$id'";
如果一个页面需要很长时间才能执行,则可以让一个查询覆盖另一个查询。同样使用这个,你可能甚至不需要运行第一个查询-除非你想从中获得其他信息
出现错误的原因是,一个脚本正在读取数据并获取值,然后根据存储的值进行更新,但与此同时,其他脚本可能正在更新该行。你可以通过使用事务来避免这种情况,但这对你正在做的事情来说似乎太过分了。
您需要停止使用mysql_*
,因为这些函数已弃用
您不需要进行2次查询就可以将字段增加1:
$query = "UPDATE DB SET views=views+1 WHERE ID='$id'";
和PDO
示例:
$db = new PDO('mysql:host=localhost;dbname=mydb;charset=UTF-8', 'username', 'password', array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
$stmt = $db->prepare("UPDATE DB SET views=views+1 WHERE ID=:id");
$stmt->execute(array(':id' => $id));
阅读有关准备好的报表和PDO 的更多信息