Note that there are some explanatory texts on larger screens.

plurals
  1. POMySQL query on cron overlaps, ignores 'locked' rows
    primarykey
    data
    text
    <p>I'm trying to lock a row in a table as being "in use" so that I don't process the data twice when my cron runs every minute. Because of the length of time it takes for my script to run, the cron will cause multiple instances of the script to run at once (usually around 5 or 6 at a time). For some reason, my "in use" method is not always working.</p> <p>I do <em>not</em> want to LOCK the tables because I need them available for simultaneous processing, that is why I went the route of pseudo-locking individual rows with an 'inuse' field. I don't know of a better way to do this.</p> <p>Here is an illustration of my dilemma: </p> <pre><code> &lt;? //get the first row from table_1 that is not in use $result = mysqli_query($connect,"SELECT * FROM `table_1` WHERE inuse='no'"); $rows = mysqli_fetch_array($result, MYSQLI_ASSOC); $data1 = $rows[field1]; //"lock" our row by setting inuse='yes' mysqli_query($connect,"UPDATE `table_1` SET inuse='yes' WHERE field1 = '$data1'"); //insert new row into table_2 with our data if it doesn't already exist $result2 = mysqli_query($connect,"SELECT * FROM `table_2` WHERE field='$data2'"); $numrows = mysqli_num_rows($result2); if($numrows &gt;= 1) { //do nothing } else { //run some unrelated script to get data $data2 = unrelatedFunction(); //insert our data into table_2 mysqli_query($connect,"INSERT INTO `table_2` (field) value ('$data2')"); } //"unlock" our row in table_1 mysqli_query($connect,"UPDATE `table_1` SET inuse='no' WHERE field1 = '$data1'"); ?&gt; </code></pre> <p>You'll see here that $data2 won't be collected and inserted if a row already exists with $data2, but that part is for error-checking and does not answer my question as the error still occurs. I'm trying to understand why (if I don't have that error-check in there) my 'inuse' method is sometimes being ignored and I'm getting duplicate rows in table_2 with $data2 in them.</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload