Page 1 of 1

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

Posted: 2007-06-24 11:54
by dtdesign
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

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

Posted: 2007-06-24 12:45
by Roger Wilco
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.

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

Posted: 2007-06-24 13:06
by kase
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.

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

Posted: 2007-06-24 13:40
by dtdesign
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