ERLEDIGT
NEIN
NEIN
ANTWORTEN
9
9
ZUGRIFFE
396
396
EMPFEHLEN
-
Hallo,
ich schreibe mit folgenden Code zwei Einträge in meine Datenbank:
Allerdings habe ich Angst vor dem Tag, an dem Anweisung 1 ausgeführt wird und Anweisung 2 nicht. Ist es in PHP möglich, dass keine Anweisung ausgeführt wird wenn es zu einem Fehler kommt? Hat dieses Kind einen Namen?PHP-Code:$database= new mysqli('HOST', 'USER', 'PW', 'DB');
if (mysqli_connect_errno()) {
echo 'Fehlermeldung!';
exit();
}
$query = "insert into table_a values ('', '$a')";
$result = $database->query($query);
if (!$result) {
echo 'Fehlermeldung!';
$database->close();
exit();
}
$id = $database->insert_id;
$query = "insert into table_b values ('$id', '$b')";
$result = $database->query($query);
if (!$result) {
echo 'Fehlermeldung!';
$database->close();
exit();
}
Geändert von _hq_ (27.01.12 um 15:20 Uhr)
-
Du kannst am schluss ein Housekeeping-Script laufen lassen
hole nach dem INSERT mit $database->insert_id die id heraus.
Wenn b jetzt auf einen Fehler läuft
Code sql:1 2
DELETE table_a WHERE id = {$id}
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Danke für die Hilfe, deine Lösung klingt logisch, aber auch etwas verschachtelt. Könnte folgendes funktionieren:
Ich bin zurzeit leider an keinem PC, an dem ich es testen kann.PHP-Code:$database= new mysqli('HOST', 'USER', 'PW', 'DB');
if (mysqli_connect_errno()) {
echo 'Fehlermeldung!';
exit();
}
$database->autocommit(FALSE);
$query = "insert into table_a values ('', '$a')";
$database->query($query);
$id = $database->insert_id;
$query = "insert into table_b values ('$id', '$b')";
$database->query($query);
if (!$database->commit()) {
$database->rollback();
echo 'Fehlermeldung';
exit();
}
-
Nein, der Code funktioniert leider nicht. Nur die erste Datenbankabfrage wird ausgeführt. Kennt sich jemand mit rollback/commit aus und kann den Fehler ausbessern? Vermutlich hapert es an einer Kleinigkeit (hoffe ich).
Geändert von _hq_ (28.01.12 um 14:49 Uhr)
-
So, jetzt aber:
Allerdings wundert es mich, dass "auto_increment" (erste Spalte in table_a) weiterzählt, wenn $query_ok den Wert "false" annimmt.PHP-Code:$database= new mysqli('HOST', 'USER', 'PW', 'DB');
if (mysqli_connect_errno()) {
echo 'Fehlermeldung!';
exit();
}
$database->autocommit(FALSE);
$query_ok = true;
$query = "insert into table_a values ('', '$a')";
if (!$database->query($query)) {
$query_ok = false;
}
$id = $database->insert_id;
$query = "insert into table_b values ('$id', '$b')";
if (!$database->query($query)) {
$query_ok = false;
}
if ($query_ok == false) {
$database->rollback();
echo 'Fehler: ...';
} else {
$database->commit();
echo 'Eintrag erfolgreich!';
}
Geändert von _hq_ (29.01.12 um 14:35 Uhr)
-
Sobald du einen Eintrag mit auto_increment gemacht hast und diesen löscht, wird er dennoch gezählt. Wieso das so ist, kann viele Gründe haben. Ich weiß es nicht, kann aber spekulieren, dass es mit möglichen Updates zu tun haben könnte, welche dann neue Einträge überschreiben würden.
Jedenfalls sind bereits verwendete IDs immer ausgeschlossen von AI.
-
Danke für die Info. Weißt du, ob man dieses Verhalten auch unterbinden kann?
-
Weiß ich leider nicht. Ich kann es mir auch nicht vorstellen, weil wie gesagt bei gelöschten Einträgen von einer Benutzerdatenbank dann möglicherweise noch Verweise auf andere Tabellen vorhanden wären...
-
-
Dann musst du die ID von Hand vergeben. Ich abe mal ein SQL-Statment geschrieben, welches die erste freie ID aussucht.
[MySQL] First not used Id
ACHTUNG!
Eignet sich nicht um in einer Multiuser-Umgebung die IDs zu vergeben, da zwieschen ID auslesen und neuen Beitrag posten jemand anderes die ID besetzen kann.---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
Ähnliche Themen
-
JSF "Komponenten dynamisch rendern" oder auch "die 'nächste' Seite beeinflussen"
Von Wutklumpen im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 1Letzter Beitrag: 22.09.09, 13:51 -
"Windows Server 2003" oder "Widnows Small Business"
Von flukas im Forum Microsoft WindowsAntworten: 6Letzter Beitrag: 07.07.08, 08:15 -
"if" ok gedrückt schreibe datei "else" mach nichts
Von Berlin_Ses4m im Forum PHPAntworten: 3Letzter Beitrag: 04.12.07, 10:36 -
Bei Klick "Nickname" und/oder "PAsswort" aus Inputfeld entfernen
Von Comenius im Forum CSSAntworten: 18Letzter Beitrag: 17.08.05, 08:19 -
"verbesserter Alternativ-Ttext" oder "Text an Mauszeiger bei mouseover"
Von the snake II im Forum Javascript & AjaxAntworten: 2Letzter Beitrag: 05.01.05, 04:07





Zitieren


Login






[PHP][Snippet] Array zu XML konvertieren