mysql视图减少


mysql views get decreased

我拥有一个图像托管网站,并使用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 的更多信息