Nikako da prokužim ovu funkciju.
Ako sam dobro skužio, ideja je da osiguramo da se desio kraj transakcije podataka…ako nije bilo kraja, poništit će se sve što se desilo od početka transakcije.
Ali ne kužim zašto ovako jedan jednostavan primjer ne radi, u čemu je fora?
mysqli_autocommit($db, FALSE);
for ($x=0; $x < 10; $x++)
{
$query="INSERT INTO table (value) VALUES ($x)";
mysqli_query($db,$query);
if($x===5)die();
}
mysqli_commit($db);
Ovaj primjer sam sklepao po nekakvim osnovnim uputama odavde: http://php.net/manual/en/mysqli.commit.php …no očito sam nešto bitno krivo shvatio
Znači sa uvjetom if($x===5)die(); jednostavno forsiram da se commit nikada ne desi…i očekujem naći praznu tablicu. No tamo uredno ostaju upisane vrijednosti 0-5.
Probao sam i bez die() …forsirajući grešku na nivou baze:
mysqli_autocommit($db, FALSE);
for ($x=0; $x < 10; $x++)
{
if($x===5) $x='force fail'; //failat će jer je value type=integer
$query="INSERT INTO table (value) VALUES ($x)";
mysqli_query($db,$query);
}
mysqli_commit($db);
…rekoh možda begin-comit radi samo kada greška dođe od tamo…no ista stvar, ostaju prvi upisi…
Gdje griješim? Hvala.