2009-03-27 11 views
3

Ich habe ein Problem mit PDO aufgetreten, weil ein Fehler nicht abgefangen wurde.Problembehandlung PDO: Fehler nicht beim Ausführen der vorbereiteten Anweisung

Der Code ist einfach und funktioniert ganz gut, ich werde umfassen nur eine Probe Verwirrung zu vermeiden: aber

$sql = 'INSERT INTO somedatetable (something) 
     VALUES (:something) 
     ON DUPLICATE KEY UPDATE something=:something'; 

$values = array(":something" => $something); 

try { 
    $stmt = $dbh->prepare($sql);  
    $stmt->execute($values);  
} catch (PDOException $e) { 
    echo "Error: " . $e->getMessage() . "<br />\n"; 
} 

Der Code funktioniert gut, wenn es auf einem neuen Modul arbeiten, ich lief in ein Problem, dass Es wurden keine Datensätze hinzugefügt oder geändert, und es wurde kein Fehler festgestellt.

$stmt zurückgegeben false aber ich hatte keine Ahnung, warum oder wie Sie den Fehler finden.

Die Lösung war am Ende einfach, ich benutzte einen begrenzten MySQL-Benutzer, der keine Schreibberechtigungen für die Tabelle hatte. Diese Fehler werden immer sofort angezeigt, wenn mysql verwendet wird, aber mit PDO weiß ich nicht, wie ich zu ihnen komme.

Wie bekomme ich PHP/PDO zum Anzeigen oder Erfassen dieser Art von Datenbankfehlern?

Antwort

7

PDO::errorInfo() oder PDOStatement->errorInfo()

Als Ausnahmen, überprüfen Sie die Dokumentation für "Errors and error handling" in PDO. Ausnahmen werden standardmäßig nicht ausgelöst, weshalb Sie sie möglicherweise aktivieren möchten.

Siehe auch:

+1

Danke, das mir sagt, genau das, was ich wissen muss. Eine weitere Frage, warum wird der Fehler nicht abgefangen? – jeroen

+0

Du hast gesagt, dass es falsch zurückgegeben wurde, das heißt, es wurde abgefangen ;-) –

+0

Ummmmmmmmm, was ist der Zweck, eine catch-Anweisung zu haben, wenn sie die Nachricht nicht anzeigt? Ich dachte, der ganze Sinn davon wäre, diese zu beseitigen, wenn (Erfolg) sonst Kombinationen ... – jeroen