$st = $db->prepare("SELECT * FROM c6ode");
Wie kann ich den absichtlichen MySQL-Fehler für die Abfrage im obigen Fall überprüfen?
TPSstar
$st = $db->prepare("SELECT * FROM c6ode");
Wie kann ich den absichtlichen MySQL-Fehler für die Abfrage im obigen Fall überprüfen?
VolkerK
Sie müssen das Fehlermodusattribut setzen PDO::ATTR_ERRMODE
Zu PDO::ERRMODE_EXCEPTION
.
Und da Sie erwarten, dass die Ausnahme von der ausgelöst wird prepare()
Methode sollten Sie die deaktivieren PDO::ATTR_EMULATE_PREPARES
Besonderheit. Andernfalls “sieht” der MySQL-Server die Anweisung nicht, bis sie ausgeführt wird.
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$pdo->prepare('INSERT INTO DoesNotExist (x) VALUES (?)');
Drucke (oder Protokolle, abhängig von den PHP-Einstellungen)
SQLSTATE[42S02]: Base table or view not found:
1146 Table 'test.doesnotexist' doesn't exist
Warum Try/Catch verwenden, wenn PDO den Fehler trotzdem abfängt?
– Chiwda
26. Juni 2022 um 17:46 Uhr
ladar
Ich verwende dies ohne zusätzliche Einstellungen:
if (!$st->execute()) {
print_r($st->errorInfo());
}
8 Jahre später immer noch die beste Antwort
– Petrus
4. Dezember 2020 um 14:18 Uhr
Perfekt für 2021
– Arun Maurya
1. Juni 2021 um 7:48 Uhr
@Petro nirgendwo ist es das “Beste”, sobald Sie Ihren Lernsandkasten beendet haben und das im erkennen Produktion Code sollte sein Nichts so wie das.
– Ihr gesunder Menschenverstand
10. März um 8:08 Uhr
Ich vermute, dass Ihre Beschwerde darin besteht, dass die Ausnahme nicht ausgelöst wird. PDO ist höchstwahrscheinlich so konfiguriert, dass es keine Ausnahmen auslöst. Aktivieren Sie sie damit:
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
Nein, funktioniert immer noch nicht, ich weiß, dass meine Abfrage falsch ist, aber ich möchte diesen Fehler anzeigen.
– TPSstar
8. Januar 2012 um 8:48 Uhr
Möglicherweise ist beim Aufruf von ein Fehler aufgetreten new PDO(...
selbst. Versuchen Sie, die Ebene von error_reporting zu erhöhen, indem Sie beispielsweise festlegen error_reporting(E_ALL)
.
– Steve Rukuts
8. Januar 2012 um 8:49 Uhr
eine schnelle Möglichkeit, Ihre Fehler beim Testen zu sehen:
$error= $st->errorInfo();
echo $error[2];
/* Provoziere einen Fehler — die BONES-Tabelle existiert nicht */
$sth = $dbh->prepare('SELECT skull FROM bones');
$sth->execute();
echo "\nPDOStatement::errorInfo():\n";
$arr = $sth->errorInfo();
print_r($arr);
Ausgang
Array
(
[0] => 42S02
[1] => -204
[2] => [IBM][CLI Driver][DB2/LINUX] SQL0204N "DANIELS.BONES" is an undefined name. SQLSTATE=42704
)
Nicht erfasster Fehler: Aufruf der undefinierten Funktion errorInfo()
– Kwnstantinos Nikoloutsos
14. Dezember 2019 um 15:00 Uhr
Nicht erfasster Fehler: Aufruf der undefinierten Funktion errorInfo()
– Kwnstantinos Nikoloutsos
14. Dezember 2019 um 15:00 Uhr