RE: [PHP-DB] Multi-User Update Problem
| From: | Ford, Mike | Date: | Wed, 01 Dec 2004 13:52:05 +0000 |
| Subject: | RE: [PHP-DB] Multi-User Update Problem | ||
| Groups: | php.db php.db | ||
| Request: | Send a blank email to php-db+get-37526@lists.php.net to get a copy of this message | ||
To view the terms under which this email is distributed, please go to http://disclaimer.leedsmet.ac.uk/email.htm
On 30 November 2004 14:45, SCALES, Andrew wrote:
> Thanks very much for your help. The main difficulty I was
> having really was
> unlocking the record again if the user crashed out or just
> closed down their
> browser/computer (something they have a bad habit of doing)
> but storing the
> time the record was locked and ignoring the lock if it's over
> that time
> sounds interesting.
> I may try storing the data in a session variable and then
> comparing that to
> the database before the updated data is inserted into the
> record as Bastien
> suggested. We wanted to keep hits on the db to a minimum, but
> seen as some
> extra traffic will be necessary anyway I may just try that.
Another approach to this might be:
Keep a column in your database table for time of last update of each record.
When a user reads a record for update, don't lock it at this point, but save
the time at which it was read into the user's session (or somewhere in the
database).
On receiving a potential update, check the time the record was read (as
recorded above) and the last update time of the record (lock the record as
part of this query) -- if the update time is later then the read time,
someone else has updated in the interim and you should abandon ship;
otherwise, update the record including a new last-updated value; in either
case, unlock the record.
This methodology keeps both the lock and unlock in the same script (and
potentially within a single database transaction), so no need for any
external checks for locked records, and minimizes the amount of time for
which any one record is locked.
Cheers!
Mike
---------------------------------------------------------------------
Mike Ford, Electronic Information Services Adviser,
Learning Support Services, Learning & Information Services,
JG125, James Graham Building, Leeds Metropolitan University,
Headingley Campus, LEEDS, LS6 3QS, United Kingdom
Email: m.ford@leedsmet.ac.uk
Tel: +44 113 283 2600 extn 4730 Fax: +44 113 283 3211