2012-03-29 1 views
1

Wenn ich ein Array von Datensätzen speichern, d. H. Mehrere Datensätze, was passiert, wenn einer der Datensätze in der Mitte einen Fehler (sql) hat? Werden nun alle Datensätze nicht oder nur die aktuelle oder keine Zeile eingefügt? Wie soll ich mit der Situation umgehen?Was passiert mit späteren Abfragen, wenn eine vorherige Abfrage einen Fehler hat

PDO-Treiber ist Mysql

+2

Welche Art von Fehler? Und für welches RDBMS? –

+0

Ich meine ein SQL-Fehler sagen, dass einige Feld/Datensatz ist Null, aber nach Db sollte es nicht – aWebDeveloper

+0

Mysql aufhören, wenn das erste Problem (Fehler) –

Antwort

1

würde Die allgemeine Lösung TRANSACTION(mysql)(pgsql)(mssql) zu bedienen. Was Sie damit machen können und wie viel Kontrolle Sie haben, hängt von RDBMS ab. Zum Beispiel: Mit PostgreSQL können Sie eine SAVEPOINT erstellen, zu der Sie ROLLBACK TO hinzufügen können.

Eine andere Lösung wäre STORED PROCEDURE zu verwenden. In diesem Fall können Sie festlegen, was passieren soll, wenn ein Fehler auftritt mit DECLARE .. HANDLER

+0

Ich möchte andere als die aktuelle fehlerhaften Abfrage Ausführung fortsetzen ... so wird das passieren – aWebDeveloper

+0

Nein, mit MySQL-Transaktionen, die Sie nicht tun können Dies. Und gespeicherte Prozedur in Ihrem Fall möglicherweise nicht praktikabel. Sie könnten immer eine vorbereitete Anweisung erstellen und diese Anweisung in einer Schleife mit neuen Daten ausführen. Die Methode 'execute()' gibt 'false' zurück, wenn ein Fehler auftritt. –

2

einen Blick auf PDO-Transaktionen nehmen: http://php.net/manual/en/pdo.begintransaction.php

Sie können, ob überprüfen ein Fehler aufgetreten ist, und wenn ja Ihre Commits Rollback oder tun, was Sie

+0

Aber wenn Sie einen Fehler haben Sie Rollback, so, ist wie beginnen eine andere Abfrage ohne Transaktion oder nicht? –

+0

Ja, ich würde Ihnen empfehlen, das Dokument zu lesen. – worenga

+0

Danke, @satoshi haben ein gutes Beispiel http://StackOverflow.com/A/9925679/744255 –

2
zu tun beabsichtigen

Diese Situationen werden mit database transactions verwaltet.

Das klassische Beispiel ist, wenn ich Geld von meinem Konto auf ein anderes Konto überweisen möchte. Es gibt zwei Abfragen durchgeführt werden:

  1. Entfernen Sie das Geld von meinem Konto
  2. Legen Sie das Geld in dem anderen Konto

Natürlich, wenn die zweite Abfrage fehlschlägt, möchte ich die erste Person zurückgesetzt werden und den Benutzer über den Fehler informieren. Dafür gibt es Transaktionen.

Wenn Sie keine Transaktionen verwenden, wenn die zweite Abfrage fehlschlägt, wird die erste trotzdem ausgeführt und nicht zurückgesetzt (das Geld verschwindet also). Dies ist das Standardverhalten von MySQL.

+0

+1 für das Beispiel. –

+0

Ich möchte andere als die aktuelle fehlerhaften Abfrage Ausführung fortsetzen ... so wird das passieren – aWebDeveloper

Verwandte Themen