私は、データキャッシュ機能を備えたPHPサイト用の新しいエンジンを開発しています。今私はこれらのスクリプト間の干渉が可能かどうか疑問に思っています。次の例を考えてみましょう。データキャッシングが干渉を引き起こす可能性がありますか?
多くのユーザーが写真関連のWebサイトにアクセスし、2人がほぼ同じ時間に2つのスクリプトを実行しているとします。
スクリプト1は、 'FooBar'という名前のユーザーとそのすべての写真をデータベースから削除します。
スクリプト2は、写真nr 12345(FooBar製)を表示します。
- (スクリプト1)ユーザー 'FooBar'が存在するかどうかを確認します。そのIDを変数
$id
に格納します。 - (スクリプト2)写真nr 12345が存在するかどうかを確認します。店主IDを変数
$owner
に格納します。 - (スクリプト1)
query("DELETE FROM users WHERE id='$id' ");
- (スクリプト2)
query("SELECT name FROM users WHERE id='$owner' ");
//エラーここ - (スクリプト1)
query("DELETE FROM photos WHERE owner='$id' ");
私達が見たように、スクリプト2は、写真が存在することを検出したが、その所有者は既に削除されています。
質問はです:PHPスクリプトが順番に処理されていますか?(提示されたシナリオは不可能です)そうでない場合は、1つのスクリプトで複数のクエリを送信するときに、そのようなエラーを防ぐために何ができますか?
ありがとうございました。
ありがとうございました。提示された風景は単なる例であり、私はこれがより良い方法で行えることを知っています。だから、大規模なウェブサイトを作成するとき、私は常にランタイム中にデータを変更することができることを認識している必要があります。
しかし、この方法では、PHPの変数に格納されている情報を信頼できません。このような問題にどのように対処していますか? 1つのクエリ内のすべてのデータを更新または取得しますか?
ステップ4は「エラー」ではないはずです。レコードが返されていないことを検出し、ユーザーに404を表示する必要があります。 – meagar