Wie erhalte ich einen Abfragefehler von „prepare()“ in PDO PHP?

Lesezeit: 2 Minuten

Benutzeravatar von TPSstar
TPSstar

    $st = $db->prepare("SELECT * FROM c6ode");

Wie kann ich den absichtlichen MySQL-Fehler für die Abfrage im obigen Fall überprüfen?

Benutzeravatar von VolkerK
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

ladars Benutzeravatar
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

1449350cookie-checkWie erhalte ich einen Abfragefehler von „prepare()“ in PDO PHP?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy