Ich verwende PHP 8.0 und habe nachfolgenden Code. In diesem hole ich mir die IDs aus einer Tabelle und lösche anschließend jeden Datensatz einzeln. Sollte dieser in einer anderen Tabelle verwendet werden/verknüpft sein (ich habe mit Constraints, also Fremdschlüsseln gearbeitet), so gibt es eine Fehlermeldung, die ich aber abfange und ignoriere, da ich nur wissen möchte, welche Datensätze tatsächlich verwendet werden (die abgefangene Fehlermeldung lautet
Der Code macht auf meinem lokalen PC mit Wampserver keine Probleme (d. h. es gibt keine Ausgabe einer Fehlermeldung, weil alles abgefangen wird), aber auf einem Ubuntu-System (auf einem vServer) gibt PHP mir die oben genannte Fehlermeldung immer aus. Hat jemand eine Idee, warum das so ist?
(dieser Code ist natürlich abgespeckt und ergibt so eher weniger Sinn)
Und ja, der auftretende Fehlercode im inneren
"Cannot delete or update a parent row: a foreign key constraint fails (`db`.`machine`, CONSTRAINT `machine_images` FOREIGN KEY (`img_id`) REFERENCES `images` (`id`) ON UPDATE CASCADE)"
).Der Code macht auf meinem lokalen PC mit Wampserver keine Probleme (d. h. es gibt keine Ausgabe einer Fehlermeldung, weil alles abgefangen wird), aber auf einem Ubuntu-System (auf einem vServer) gibt PHP mir die oben genannte Fehlermeldung immer aus. Hat jemand eine Idee, warum das so ist?
PHP-Quellcode
- <?php
- try {
- $result = $db->query('SELECT id FROM images');
- $c = 0;
- $stm = $db->prepare('DELETE FROM images WHERE id = ?');
- $stm->bind_param('i', $id);
- while ($row = $result->fetch_assoc()) {
- try {
- $id = $row['id'];
- $stm->execute();
- if ($stm->affected_rows > 0) {
- $c++;
- }
- }
- catch (mysqli_sql_exception $e) {
- // Fehler beim Löschen: Wenn Fremdschlüsselverletzung, dann wird das Bild verwendet, andere Fehler weitergeben
- if ($e->getCode() != 1451) throw $e;
- }
- }
- $stm->close();
- echo 'success';
- }
- catch (Exception $e) {
- // Ein Fehler ist aufgetreten
- echo $e->getMessage();
- }
- ?>
(dieser Code ist natürlich abgespeckt und ergibt so eher weniger Sinn)
Und ja, der auftretende Fehlercode im inneren
catch
ist wirklich 1451
, trotzdem wird der Fehler weitergegeben.Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()