Предполагая, что вы используете функции mysql_*()
на основе вашего упоминания mysql_affected_rows()
, вы просто должны вызывать каждый этап транзакции в отдельном mysql_query()
и проверять ее успех или неудачу на каждом этапе. Если вы не оберните это как хранимую процедуру, вы должны вызывать их как отдельные операторы, так как mysql_query()
не поддерживает несколько операторов в одном вызове.
function doTransaction() {
mysql_query("START TRANSACTION;");
$ins = mysql_query("INSERT INTO ....");
if (!$ins) {
// fail
mysql_query("ROLLBACK");
return FALSE;
}
$upd = mysql_query("UPDATE...");
if (!$upd) {
// fail
mysql_query("ROLLBACK");
return FALSE;
}
if (mysql_affected rows() === 0) {
// no rows updated, rollback if necessary
mysql_query("ROLLBACK");
return FALSE;
}
$del = mysql_query("DELETE FROM...");
if (!$del) {
// fail
mysql_query("ROLLBACK");
return FALSE;
}
// All succeeded
mysql_query("COMMIT");
return TRUE;
}