WernerK: PDO & MSSQL & Prepared Statements

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

  1. 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.