Stuart, you are calling your rollback function only if $result is false.
This check you are performing at the end of performing your 3 queries, each
of which update $result. The net result here is that you will only call
rollback() if the 3rd query results in false.
I would create another function called maybe run_query() which is something
like:
function run_query($sql)
{
$result = mysql_query($query);
if(!$result)
{
return false;
}else{
return true;
}
}
then:
begin();
$query = "INSERT INTO firsttable.....//first query
$res1 = run_query($query);
$query = "INSERT INTO secondtable...//second query
$res2 = run_query($query);
$query = "INSERT INTO thirdtable....//third query
$res3 = run_query($query);
if($res1 && $res2 && $res3) // If all results are true
{
commit();
echo "your insertions were successful";
}else{
echo mysql_errno($link)." : ".mysql_error($link)."\n";
rollback();
exit;
}
Graham
> -----Original Message-----
> From: Stuart Felenstein [mailto:[EMAIL PROTECTED]
> Sent: 16 October 2004 13:53
> To: [EMAIL PROTECTED]
> Subject: [PHP-DB] Transactions - working but unsure about steps
>
>
> My statements are all working but I'm not sure if
> things are set up correctly. I say this because at
> one point the first $query failed, yet the rest of
> inserts wre committed. Now I believe I need to set
> autocommit to 0 , yet the query failed due to a syntax
> error. Hence 0 records effected wouldn't be the case
> here.
> Here is what I have:
>
> //Create these functions -
> function begin()
> {
> mysql_query("BEGIN");
> }
> function commit()
> {
> mysql_query("COMMIT");
> }
> function rollback()
> {
> mysql_query("ROLLBACK");
> }
>
> connection statement with error checking...........
>
> begin(); // transaction begins
> $query = "INSERT INTO firsttable.....//first query
> $result = mysql_query($query); // process first query
> $query = "INSERT INTO secondtable...//second query
> $result = mysql_query($query); // process second query
> $query = "INSERT INTO thirdtable....//third query
> $result = mysql_query($query); // process third query
>
> then:
>
> if(!$result)
> {
> echo mysql_errno($link) . ": " . mysql_error($link).
> "\n";
> rollback(); // transaction rolls back
>
> exit;
> }
> else
> {
> commit(); // transaction is committed
> echo "your insertion was successful";
>
> --
> PHP Database Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>
--
PHP Database Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php