ユーザーが入札可能な1つのゲーム用のコードを作成しています(オークションなど)。 1分のタイマーがあり、終了すると何らかのアクションが発生します。私は以下のすべての詳細を書きます。PHPが2回実行され、MySQLデータベースに重複レコードが生成される場合
タイマースクリプト:
$auctionTimer = 1;
$target_time = strtotime('+' . $auctionTimer . 'minutes', strtotime($r1['date']));
$current_time = time();
$seconds_left = $target_time - $current_time;
$minutes_left = floor($seconds_left/60);
if (strlen($minutes_left) != 2) {
$minutes_left = sprintf("%02d", $minutes_left);
}
$seconds_left -= $minutes_left * 60;
$seconds_left = floor($seconds_left);
if (strlen($seconds_left) != 2) {
$seconds_left = sprintf("%02d", $seconds_left);
}
何かがif ($current_time > $target_time && $ragr1['count'] >= 1) {
チェックと悪いです:私はこの問題はSQL話ではありませんので、私はPDOクエリを投稿してはならないと思います
$stmt1 = $pdo->prepare("SELECT id, user_id, user, bid, date FROM
tb_auction_bids ORDER BY id DESC");
$stmt1_while = $pdo->prepare("SELECT id, user_id, user, bid, date FROM
tb_auction_bids");
$stmt3 = $pdo->prepare("SELECT id, user_id FROM tb_auction_winners ORDER BY
id DESC LIMIT 1");
$stmt6 = $pdo->prepare("UPDATE tb_users SET money = money + :win WHERE id =
:user_id");
$stmt9 = $pdo->prepare("INSERT INTO tb_auction_winners (user_id, user, win)
VALUES (:user_id, :user, :win)");
$stmt11 = $pdo->prepare("SELECT id, user_id, user FROM tb_auction_bids ORDER
BY id DESC LIMIT 1");
$stmt12 = $pdo->prepare("TRUNCATE TABLE tb_auction_bids");
$agr1 = $pdo->prepare("SELECT COUNT(id) AS count FROM tb_auction_bids");
$agr2 = $pdo->prepare("SELECT SUM(bid) AS sum FROM tb_auction_bids");
$stmt1->execute();
$stmt1_while->execute();
$stmt3->execute();
$stmt11->execute();
$agr1->execute();
$agr2->execute();
$r1 = $stmt1->fetch(PDO::FETCH_ASSOC);
$r3 = $stmt3->fetch(PDO::FETCH_ASSOC);
$r11 = $stmt11->fetch(PDO::FETCH_ASSOC);
$ragr1 = $agr1->fetch(PDO::FETCH_ASSOC);
$ragr2 = $agr2->fetch(PDO::FETCH_ASSOC);
if ($current_time > $target_time && $ragr1['count'] >= 1) {
$stmt9->execute(array(
':user_id' => $r11['user_id'],
':user' => $r11['user'],
':win' => $ragr2['sum']
));
$stmt6->execute(array(
':win' => $ragr2['sum'],
':user_id' => $r1['user_id']
));
while ($r1 = $stmt1_while->fetch(PDO::FETCH_ASSOC)) {
$stmt7->execute(array(
':user_id' => $r1['user_id'],
':aukciono_id' => $r3['id'],
':user' => $r1['user'],
':date' => $r1['date'],
':bid' => $r1['bid']
));
}
$stmt12->execute();
}
、それはPHPについてです。このページ(... /オークションなど)にいない場合、1分タイマーが終了すると、何もしません。報酬を得るなど、オークションに再度行く必要があります。 JavaScriptを使用してタイマーが終了したことを確認し、ファイルを実行する必要がありますか?また https://www.youtube.com/watch?v=_CZcnd3RTNw
":整合性制約違反:1048列 'ポスト' はNULLにすることはできませんSQLSTATE [23000]"、私が手に:それは(ビデオ)どのように見えるか
はこれがありますエラーと私はこのスレッドを見て: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'post' cannot be null
しかし、それは役に立たなかった。 $r1['aukciono_id']
は別の変数としても定義されていますが、$r1['aukciono_id']
のみがエラーを示します。
if ($current_time > $target_time && $ragr1['count'] >= 1) {
は1回だけ実行する必要がありますが、2回実行され、重複するMySQLレコードが生成されます。多分それはそのPDOエラーのためでしょうか?誰かが私を助けてくれますか?
あなたのクエリには '$ stmt9'はありません。 –
も '$ stmt6' –
申し訳ありません、私の質問を編集しました。 –