mysql视图减少了

时间:2012-09-10 11:10:46

标签: php mysql image views

我拥有一个图片托管网站,我使用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)类型字段。

我注意到观点逐日减少。任何人都说出问题是什么并提供解决方案。

感谢。

2 个答案:

答案 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));

详细了解prepared statements and PDO