PDO & MSSQL & Prepared Statements
WernerK
- php
0 dedlfix
Hallo,
ich versuche mit PDO einen Eintrag in eine MSSQL DB zu machen. Das Ganze soll mit Prepared Statements gehen.
$stmt = $this->db->prepare('INSERT INTO testdatenbank.dbo.gbook ([name], [text], [timestamp]) VALUES (:name, :text, :time)');
$stmt->bindParam('name', $_POST['name'], PDO::PARAM_STR, 50);
...
$stmt->execute();
Wenn ich es so wie oben versuche (also mit 3. Parameter PDO::PARAM_STR, 50) Dann kommt folgende Fehlermeldung:
Warning: PDOStatement::execute(): SQLSTATE[42000]: Syntax error or access violation: 102 [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Falsche Syntax in der Nähe von 'OUTPUT'
Es funktioniert aber nur mit:
//$stmt->bindParam('name', $_POST['name']);
Weiss jemand den Grund? Erlaubt Microsoft diese erste Schreibweise nicht?
Gruss
Werner
Tach!
Erlaubt Microsoft diese erste Schreibweise nicht?
Microsoft hat nur die Syntax ihres SQL-Dialekts definiert. Wie das PDO aus dem PHP-Code die Statements erzeugt, ist Sache von PDO. Wenn dabei ein Statement rauskommt, das im MSSQL nicht ausgeführt werden kann, dann ist das ein Fehler in der PDO-Extension. Oder ein Fehler des Verwenders.
Zum length-Parameter von bindParam() sagt das PHP-Handbuch: To indicate that a parameter is an OUT parameter from a stored procedure, you must explicitly set the length.
Lass das weg, sonst wird das wohl als Ausgabe-Parameter erkannt und das ergibt bei einem INSERT keinen Sinn.
dedlfix.