[PHP] PDO->prepare()/PDOStatement und Fehlermeldungen

Apache, Lighttpd, nginx, Cherokee
dtdesign
Posts: 391
Joined: 2006-09-05 21:12
Location: Berlin

[PHP] PDO->prepare()/PDOStatement und Fehlermeldungen

Post by dtdesign » 2007-06-24 11:54

Hallo,

ich stehe jetzt vor dem Problem, dass PDOStatement mir keine Fehlermeldungen zurückliefert, sondern nur - wie auch in der Dokumentation festgehalten - ein boolsches false zurück gibt. Dies ist jedoch für die Fehlerbehebung problematisch.

Randnotiz zum Aufbau der Datenbank-Abstraktions-Schicht (kurz DAS):

1) Eine Instanz (bzw. Referenz) der Klasse DatabaseAbstractionLayer wird erzeugt
2) Die Verbindungsdaten für die Datenbank werden übergeben
3) Die DAS erzeugt nun ein Objekt der jeweiligen Datenbanktreiber zwecks Datenbank-Abstraktion (Notwendig um die Abfragen abstrakt formulieren zu können)
4) Der Treiber schustert durch dem Aufruf der Funktion $DAS->ExecuteQuery($parameter1, $parameter2, etc.) die Abfrage zusammen und führt diese auf der aktiven Datenbankverbindung (per Referenz aus der DAS) aus

Das Problem hierbei ist, dass PDO Fehlermeldungen (Exceptions) zurückgibt, PDOStatement bzw. PDO->prepare diese unterschlägt und ein nutzloses false zurück gibt.

Ist es irgendwie möglich, an die Fehlermeldung heran zu kommen?

Und gleich noch eine Frage hinterher, erlaubt PDO->prepare() nur Platzhalter im Sinne von :variable oder dürfen Eigenkonstruktionen (z.B.: %var_1%) auch verwendet werden (gemäß str_replace Logik)?

Gruß
dtdesign

Roger Wilco
Administrator
Administrator
Posts: 5924
Joined: 2004-05-23 12:53

Re: [PHP] PDO->prepare()/PDOStatement und Fehlermeldungen

Post by Roger Wilco » 2007-06-24 12:45

dtdesign wrote:Ist es irgendwie möglich, an die Fehlermeldung heran zu kommen?
Klar, einfach den richtigen Error Handler setzen, siehe http://de3.php.net/PDO#pdo.error-handling.
dtdesign wrote:Und gleich noch eine Frage hinterher, erlaubt PDO->prepare() nur Platzhalter im Sinne von :variable oder dürfen Eigenkonstruktionen (z.B.: %var_1%) auch verwendet werden (gemäß str_replace Logik)?
Nein, die Platzhalter müssen immer ":name" lauten. Eigene Escapezeichen, wie % sind nicht möglich.
Wenn du Spass daran hast, kannst du natürlich das Prepared Statement vorher mit str_replace und Konsorten bearbeiten und alle Vorkommen von "%variable%" durch ":variable" ersetzen.

kase
Posts: 1031
Joined: 2002-10-14 22:56

Re: [PHP] PDO->prepare()/PDOStatement und Fehlermeldungen

Post by kase » 2007-06-24 13:06

Ich kann mich nicht erinnern, dass ich beim Schreiben meiner DAS für PDO derartige Probleme hatte.

Falls es wirkllich nicht hilft, das Error-Handling auf PDO::Exception zu stellen, musst du dir eine Wrapper Klasse bauen, die von PDOStatement erbt, und die Original-Funktionen per parent:: aufrufen.

dtdesign
Posts: 391
Joined: 2006-09-05 21:12
Location: Berlin

Re: [PHP] PDO->prepare()/PDOStatement und Fehlermeldungen

Post by dtdesign » 2007-06-24 13:40

Ich habe das Problem gefunden, es lag an meiner eigenen Dummheit. Exceptions werden für gewöhnlich nicht direkt behandelt, sondern durch meinen Exception-Handler abgefangen und aufbereitet.

Fakt war, dass ich hier mittels eines try-Blocks die Exception abgefangen habe, ohne diese wirklich zu behandeln (leerer catch-Block)... grml

Ich danke euch für die Hilfe.

Gruß
dtdesign