Jump to content

How to stop a code from working if the row is locked


cliftonbazaar

Recommended Posts

I have the following piece of code (if anyone can think of a better way then please tell me).

  mysql_query("BEGIN");
  #NOTE that we are only going to load in games that need to be updated so there is no need to set an IF statement
  if(@$my_team['inGame']) {$my_team_ID = $my_team['inGame'];} else{$my_team_ID=0;}
  $matches = mysql_query("SELECT * FROM matches
      WHERE completed=0 and $current_time > updateTime
      ORDER BY matchID ASC
      LOCK IN SHARE MODE ");  //Get all the matches that need updating
    while($match = mysql_fetch_array($matches)) {  //Go through all the matches that need updating
 	$notes .= "<p>MatchID - ".$match['matchID']." ".$match['homeTeam']." V ".$match['awayTeam'];
	$updateTime=$match['updateTime'];  #Get the updateTime from the match ID
	include("run_game.php");  #This is the actual file that runs the game
	$notes .= "<BR>This is the string data".$stringData."<BR>";  #Output it to make sure it works
    }
    mysql_query("COMMIT"); # Here the datarecords are released and the transaction is completed

This code works fine - the 'matches' database is only updated once; the problem is if it is run from two differant directions then ANOTHER part of the code in run_game.php is run and updated, this is not what I wanted :(

How can I get this query NOT to activate on locked rows?  I tried Google but I dont' know what to search for :confused:

Link to comment
Share on other sites

If you use FOR UPDATE with a storage engine that uses page or row locks, rows examined by the query are write-locked until the end of the current transaction. Using LOCK IN SHARE MODE sets a shared lock that permits other transactions to read the examined rows but not to update or delete them.

You need INNODB for this to work.

Link to comment
Share on other sites

You need INNODB for this to work.

 

Hi,

The actual locking of the row of the table is done correctly, but its till runs the code in the WHILE loop, I wish to make it that if the loop is locked the WHILE loop does NOT active.

Edited by cliftonbazaar
Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.