挿入されないようにロックする必要があるテーブルがありますが、挿入が防止されている間は更新できる必要もあります。
function myfunction() {
$locked = mysql_result(mysql_query("SELECT locked FROM mylock"),0,0);
if ( $locked ) return false;
mysql_query("LOCK TABLES mylock WRITE");
mysql_query("UPDATE mylock SET locked=1");
mysql_query("UNLOCK TABLES");
/* I'm checking another table to see if a record doesn't exist already */
/* If it doesn't exist then I'm inserting that record */
mysql_query("LOCK TABLES mylock WRITE");
mysql_query("UPDATE mylock SET locked=0");
mysql_query("UNLOCK TABLES");
}
しかし、これでは十分ではありません。別のスクリプトから関数が再度呼び出され、関数への 2 つの呼び出しから同時に挿入が行われています。レコードが重複しているため、それを行うことはできません。
これは緊急です助けてください。フィールドで UNIQUE を使用することを考えましたが、2 つのフィールド (player1、player2) があり、どちらにもプレイヤー ID の重複を含めることはできません。
望ましくない動作: レコード A = ( Player1: 123 Player2: 456 ) Record B = ( Player1: 456 Player2: 123 )