0

次のスクリプトがあります。

// Query
$STH = $DB->prepare('SELECT * FROM players WHERE game = ?');
$STH->execute(array($_POST['game']));

// Get the stored photos
$Used = array();
while ($row = $STH->fetch())
  $Used[] = intval($row['photo']);

// (1)

// Get a random photo that is not stored already
$Photo = array_rand(array_diff(range(1, 6), $Used));

// (2)

// Insert the photo
$STH = $DB->prepare('INSERT INTO players (id, user, game, name, family, photo) VALUES (?, ?, ?, ?, ?, ?)');
$STH->execute(array($Id, $User->id, intval($_POST['game']), $Name, $Family, $Photo));

ただし、これにより、データベースで重複した結果が得られます。具体的には、15が何度も繰り返されています (6 要素の範囲を強制するために約 30 要素で実行したテストでは、他のものではありません。

var_dump(array_diff(range(1, 6), $Used));さらに、何回も挿入した後に(1)を書くと、必ず が出力されますarray(2) { [1]=> int(2) [5]=> int(6) }。したがって、どうやら、数字の 2 と 6 は考慮されていません。またecho $Photo;、(2) の場合、数値は常に1または5であるため、明らかに挿入の問題ではありません。

では、なぜデータベース内のエントリが重複しているのでしょうか? PHP コードの何が問題になっていますか? 将来的には間違いなく 2 フィールドの一意の制約を設定しますが、ランダムな写真の ID を保存している PHP は修正されません。

4

1 に答える 1