Hey there..
First of all, sorry if this has been discussed before, I tried traversing
the archives but nothing could be found. This problem might be extremly
simple, but anyhow.. :)
The Problem:
I have a php script/Perlscript (should be possible in both :), which needs
to find the next "available" row in a table. This table looks like this:
A_TABLE:
id INT NOT NULL auto_increment default '0',
pre_value char(50) NOT NULL default 'a_predetermined_value',
post_value char(50) NOT NULL default 'table_to_be_updated_with',
in_use datetime
primary key(id)
TYPE=BDB
The table is filled with some values in pre_value so that there is something
there already, though I have no idea how many there may be, that is another
problem which is solved somewhere else :)-
The semantics are very simple:
begin;
select id from A_TABLE where datetime IS NULL;
update A_TABLE set post_value="my_input_from_scripT" where ID=<the id I
got from the above select>;
commit;
The idea is to prevent anyone from seeing the row as "available" once the
transaction has started. My idea in php would be something like:
--- Start Snip
if (!mysql_query("begin",$db)) {
echo "SQL-ERror: ". mysql_Error($db));
exit;}
if (!$res=mysql_query("select id from A_TABLE where datetime IS NULL",$db))
{
echo "SQL-ERror: ". mysql_Error($db));
exit;}
$id = mysql_result($result,id);
if (!mysql_query("update A_TABLE set post_value="$input" where ID=$id")) {
echo "SQL-ERror: ". mysql_Error($db));
exit;}
if (!mysql_query("commit")) {
echo "SQL-ERror: ". mysql_Error($db));
exit;
}
--- End Snip
I'm well aware of the "LOCK TABLE" mechanism's but I've seen what happens if
someone forgets to unlock the table or the script simply dies, so if I can
prevent this, I'd like to :)
Anyone with an idea or can see what on earth I'm missing? :)
Friendly greetings
Søren P. Skou
---------------------------------------------------------------------
Before posting, please check:
http://www.mysql.com/manual.php (the manual)
http://lists.mysql.com/ (the list archive)
To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php