Frank (no reg): PDO / MSSQL / Stored Procedure

Beitrag lesen

Hallo,

bin jetzt kein Spezialist was PDO angeht ...

$bu_name = 'test';
$groesse_arr = count($result);
$sql = 'EXEC butablecheck (?)';
$stmt = $db->prepare($sql);
$stmt->bindParam(1, $bu_name);
for($j=0;$j<=$groesse_arr-1;$j++) {
    $bu_name = $result[$j][0];
    var_dump($result[$j][0]);
    var_dump($bu_name);
    $stmt->execute();
}

die Parameternotation "(?)" erscheint mir gewagt ... ein einfaches ? ohne die Klammern sollte es auch tun. Kannst du bindParam auch mit einem Variablennamen, z.b. @P1 machen. @P1 ist unter MS SQL die gängige notation für Parameter.

Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[42000]: Syntax error or access violation: 102 [Microsoft][ODBC SQL Server Driver][SQL Server]Falsche Syntax in der Nähe von '@tablename'. (SQLExecute[102] at ext\pdo_odbc\odbc_stmt.c:133)

Da dein "EXEC butablecheck" nichts von einem Parameter @tablename hält, kann es entweder daran liegen, dass

  • in der Prozedur die Verwendung von @tablename syntaktisch inkorrekt ist
  • oder du den Aufruf der Prozedur mit mit dem Parameternamen machen musst ... also so z.b.

EXEC butablecheck @tablename = ?
->bindParam(1, $bu_name)

wobei ich mir frage ... müsste der erste Parameter nicht mit Index 0 referenziert sein ... fängt nicht alles immer irgendwie bei 0 an?

Der deutsche Teil der Fehlermeldung kommt vom ODBC Treiber (Betriebssystemsprache) bzw vom MS SQL Server selbst ...

Cheers, Frank