dedlfix: PDO / MSSQL / Stored Procedure

Beitrag lesen

Hi!

Den Handbuchhinweis zum MSSQL-Treiber von PDO kennst du? Hast du auch den ODBC-Treiber versucht? Oder mit welchem arbeitest du eigentlich?
Ich verwende momentan den mssql Treiber welcher bei PDO dabei ist, installiert ist die PHP Version 5.2.11. Danke für den Hinweis, geht es dabei um den PHP Treiber, welchen MS herausgibt?

PDO hat zwei Treiber, über die man mit dem MSSQL-Server reden kann. Ich entnehme deiner Aussage nun, dass du den PDO_DBLIB mit dem DSN-Prefix "mssql:" verwendest. Der ist laut Handbuch im Status "experimentell". Versuch doch mal den PDO_ODBC mit dem DSN-Prefix "odbc:" zu verwenden. Aber mach das erst als zweiten Versuch, probier vorher das Folgende:

Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY000]: General error: 10007 Falsche Syntax in der Nähe von 'blabla'. [10007] (severity 5) [(null)] in create_bu_tables.php on line 20
'blabla' kommt in deiner folgenden Beschreibung gar nicht vor. Bitte überprüfe, ob du nicht in Wirklichkeit was anderes ausführst als du denkst oder gibt hier keine falschen Informationen.
Das blabla hab ich nur hineingeschrieben, in Wirklichkeit steht da der Wert der Variablen $bu_name.

Es wäre jetzt wichtig, genau auf die Anführungszeichen zu achten. Denn ...

Üblicherweise beklagen sich die Datenbankfunktionen bei einem im DBMS aufgetretenen Fehler nicht mit einer PHP-Meldung. DBMS-Fehler muss man gesondert abfragen. Dass du eine PHP-Meldung bekommst, deutet für mich darauf hin, dass PDO sich über einen Fehler beklagt und noch gar nicht dazu kam, das DBMS anzusprechen.

... ich vermute, dass der PDO-Treiber die Prepared Statements nur simuliert und das SQL-Statement in Wirklichkeit beim Execute selbst zusammenbaut und dann komplett absendet. Dazu muss er für das Quotieren und Maskieren selbst sorgen. Es könnte nun aufgrund des Experimentell-Status sein, dass da was fehlerhaft arbeitet.

Oder aber es liegt an Franks Vermutung, dass CALL kein gültiger Aufruf ist, stattdessen EXECUTE zu verwenden ist und der PDO-Treiber darüber gestolpert ist.

Lo!