0

私は画像ホスティング Web サイトを所有しており、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)型のフィールドです。

ビューが日ごとに減少していることに気付きました.誰かが問題を言って解決策を提供できますか.

ありがとう。

4

2 に答える 2

5

代わりに、これを使用して更新する必要があります。

$query = "UPDATE DB SET views=views+1 WHERE ID='$id'";

ページの実行に時間がかかる場合は、あるクエリで別のクエリを上書きすることができます。また、これを使用すると、他の情報が必要な場合を除いて、最初のクエリを実行する必要がない場合があります。

エラーが発生する理由は、1つのスクリプトがデータを読み取り、値を取得してから、格納している値に基づいてデータを更新しているためですが、その間に他のスクリプトが行を更新している可能性があります。トランザクションを使用することでそれを回避することもできますが、それはあなたがしていることに対してまったくやり過ぎのようです。

于 2012-09-10T11:12:39.807 に答える
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));

プリペアドステートメントとPDOについてもっと読む

于 2012-09-10T11:12:47.293 に答える