Door
Veur Heur
op 12-03-2026 11:52
gewijzigd op 12-03-2026 11:54
775 views
Ik heb een aantal ical bestanden die ik inlees. Voordat ik dat doe, leeg ik mijn tabel. Afgelopen week gebeurde het echter dat een van de icals niet beschikbaar was, waardoor mijn script stopte en ik met een lege tabel zat. Dat kan beter. Ik dacht de volgende oplossing te hebben, echter wanneer ik een fout forceer door de url van een ical te wijzigen naar iets dat niet bestaat, is alleen de data van 1 ical beschikbaar:
$mysqli=mysqli_connect(..);
$mysqli->begin_transaction();
//legen met delete omdat truncate niet kan worden ge-rollback-t
$mysqli->query('DELETE FROM calendar;');
$mysqli->query('ALTER TABLE calendar AUTO_INCREMENT=1;');
try {
foreach($icals as $ical) {
//hier uch insert statements
}
//hier nog enkele opschoon acties (lees DELETE queries)
$mysqli->commit();
}
catch(Exception $e) {
$mysqli->rollback();
echo $e->getMessage();
}
Werkt op zich goed. In je voorbeeld gooit mysqli standaard geen Exception bij een fout.
Je kan boven je try dit toevoegen zodat database fouten ook in je catch() terecht komen.
Samenvatting van die link: "voor een ALTER TABLE wordt eerst een COMMIT gedaan"
En eerlijk gezegd zie ik eerder bezwaren dan voordelen aan het resetten van auto-increment.
Ik heb het getest en je hebt gelijk. Aangezien deze tabel geheel automatisch wordt gevuld, kan ik zonder de auto increment, dus ik denk dat ik die verwijder. Dit lijkt me althans de makkelijkste oplossing. Een andere zou zijn een tijdelijk tabel en vervolgens drop/rename..?