我拥有一个图片托管网站,我使用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是 mediumint(9)类型字段。
我注意到观点逐日减少。任何人都说出问题是什么并提供解决方案。
感谢。
答案 0 :(得分:5)
您应该使用它来更新:
$query = "UPDATE DB SET views=views+1 WHERE ID='$id'";
如果页面执行时间很长,您可以让一个查询覆盖另一个查询。使用此功能,您可能不需要运行第一个查询 - 除非您需要其他信息。
您收到错误的原因是一个脚本正在读取数据并获取值,然后根据它存储的值更新它 - 但同时其他脚本可能正在更新行。你可以通过使用交易来避免这种情况,但这对你正在做的事情来说似乎有点过分。
答案 1 :(得分:4)
您需要停止使用mysql_*
,因为这些功能已弃用
只需将字段增加1,就不需要进行2次查询:
$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));