PHP PDO MySQL Richtigen Weg, um zu überprüfen, wenn Sie eine update-Abfrage gelungen, wenn keine Zeilen betroffen sind
Was ist ein sicherer Weg, zu sagen, wenn eine update-Abfrage, gelang es bei der Verwendung von php, pdo und mysql?
In meiner app, update ich die Summen der Elemente, die eingereicht werden, aber ein Benutzer, und die Tabelle sieht wie folgt aus:
Elemente
userId | itemsAdded | itemsChecked | itemsUnChecked | itemsTotal
1 | 5 | 2 | 3 | 5
So, wenn ich update items set itemTotals = itemsChecked+itemUnChecked
die itemsTotal
Spalte bleibt gleich, es sei denn, die itemsAdded änderungen und die itemsUnChecked Schritten (2 + 3 gleich 5, 1 + 4 ist auch 5).
Ich verwendet, um zu verwenden rowCount() um zu prüfen, ob eine Abfrage erfolgreich war, aber in diesem Fall, da die itemsTotal
Spalte bleibt gleich, es gibt keine Möglichkeit zu sagen, wenn die sql-gelungen oder nicht.
$query = $conn->prepare($sql);
$query->execute(array(
":itemCount" => $itemCount
":itemId" => $itemId
));
$queryCount = $query->rowCount();
if($queryCount == 1) {
echo 'Updated succeeded';
} else {
echo 'Updated failed!';
}
Könnte ich auch gebrauchen:
$query = $conn->prepare($sql);
$result = $query->execute(array(
":itemCount" => $itemCount
":itemId" => $itemId
));
if($result) {
echo 'Updated succeeded';
} else {
echo 'Updated failed!';
}
Aber nicht, dass true oder false zurückgeben, basierend auf, wenn die Abfrage erfolgreich ausgeführt werden, oder basierend auf der Anzahl der Zeilen, die aktualisiert?
Brauche ich nur um zu überprüfen, ob die Abfrage erfolgreich war oder nicht. Keine Notwendigkeit zu sagen, die Anzahl der Zeilen, die aktualisiert wurden.
- möglich, Duplikat der Wie Sie sagen, wenn query erfolgreich ausgeführt in PHP die PDO -?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
execute()
Methode wird entweder eine Ausnahme oder FALSE zurückgeben (abhängig vom Fehler-Modus, die Sie für die Datenbank-Verbindung), wenn die Ausführung einer SQL-Anweisung fehlschlägt.Wenn wir den Fehler-Modus eine exception werfen, bevor Sie eine Anweisung ausführen (in der Regel unmittelbar nach dem herstellen einer Datenbank-Verbindung), wie dies
Dann können wir mit einem try/catch-block zum behandeln einer Ausnahme, die ausgelöst durch eine SQL-Anweisung. So etwas wie dieses:
Informationen über den Fehler-Modus-Einstellungen und Handhabung entnehmen Sie der Dokumentation hier: http://php.net/manual/en/pdo.error-handling.php
Oder, wenn eine PDO nicht eine Ausnahme werfen, können wir eine einfache
if
test. (Dieexecute()
Methode den Wert FALSE zurück, wenn die Anweisung fehlschlägt.)Für präzisere Kontrolle mit den verschiedenen Arten des Scheiterns, können wir die
errorCode()
- Methode zum abrufen von SQLSTATE in Verbindung mit den letzten Betrieb auf der Anweisung behandeln, und wir führen Sie bedingte tests auf den zurückgegebenen Wert. http://php.net/manual/en/pdostatement.errorcode.phprowCount()
, um herauszufinden, wie viele Zeilen betroffen waren. HINWEIS: WennPDO::MYSQL_ATTR_FOUND_ROWS => true
auf die Verbindung, dannrowCount()
gibt die Anzahl der Zeilen gefunden (abgestimmt), vielmehr als die Anzahl der betroffenen Zeilen.Selbst wenn keine Zeilen betroffen sind, das bedeutet nicht, dass das update fehlgeschlagen ist genauso, wie Sie gesagt haben, nichts geändert wurde. Es würde nur dann nicht, wenn es eine Ausnahme geworfen. Um dies zu umgehen, müssten Sie implementieren eines try/catch-block.
http://php.net/manual/en/language.exceptions.php