Ich optimiere eine veraltete Datenbankklasse, die für PHP/5.2 geschrieben wurde, die entworfen wurde, um sich mit MySQL zu verbinden und alle Fehler zu verstecken. Ich habe die PDO-Instanz konfiguriert Ausnahmen werfen:Können PDO-Methoden fehlschlagen und keine PDOException auslösen?
new PDO($dsn, $user, $pass, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION))
Jetzt muss ich meinen Code entsprechend anpassen, den Fall zu behandeln, in denen Funktionen eine Ausnahme auslösen kann, wenn sie nicht vor, damit ich in den manuellen Kopf.
In einigen Fällen ist das Handbuch explizit, z. PDO::prepare
:
If the database server successfully prepares the statement,
PDO::prepare()
returns aPDOStatement
object. If the database server cannot successfully prepare the statement,PDO::prepare()
returnsFALSE
or emitsPDOException
(depending on error handling).
In anderen Fällen ist es Art von vage ist, z.B. PDO::commit
:
Returns
TRUE
on success orFALSE
on failure.
Throws aPDOException
if there is no active transaction.
(Kann es aus einem anderen Grund fehlschlagen und einfach false
zurückkehren?)
Und es sind Fälle, in denen Ausnahmen werden nicht einmal erwähnt, z.B. :
Returns
TRUE
on success orFALSE
on failure.
... obwohl es klar ist, zu überprüfen, ob es PDOException
auf Fehler wirft (zumindest auf bestimmte Fehler).
Muss ich noch den Rückgabewert von Methoden überprüfen, die false
bei Fehler zurückgeben, wenn das Handbuch nicht anders sagt?
@RyanVincent Sprichst du über normale Fehlerbedingungen, die im regulären Betrieb auftreten (ein Beispiel wäre großartig) oder die kleinen Fehler, die die PHP-Entwicklung ab und an anregen? –
Sie haben Recht, im normalen Betrieb ist es sehr zuverlässig. Imo, 'emuliert = falsch' und falsche Parameterhinweise können PDO verwirren. Ich schlage vor, du versuchst es mit 'emuliert vorbereiten' auf 'wahr' gesetzt. Du verlierst nichts außer ein paar Minuten? –
ich schlage vor, dass Sie keine Parametertypen angeben, es sei denn, BLOB-Typen werden verwendet. Und nur für die 'Blob'-Spalten. –