Hi!
$bu_name = 'test';
$sql = 'EXEC butablecheck test';
$stmt = $db->prepare($sql);
$stmt->bindParam(1, $bu_name);
$stmt->execute();
>
> Sehr gut, das Reduzieren des Codes auf das Wesentliche hilft, sich ohne störendes Beiwerk auf den Fehler zu konzentrieren. Und siehe da, weg ist er. Das Problem steckt also im Beiwerk. - Jedoch, zu früh gefreut. Ich vermisse in deinem $sql-String den Platzhalter, an dessen Stelle später der gebundene Wert eingefügt werden soll. $bu\_name kommt hier also gar nicht zum Einsatz, was aber essentiel für deine gewünschte Funktionalität ist und somit in einem Nachbau wirksam vorhanden sein muss.
Hab das noch mal angepasst.
$bu\_name = 'test';
var\_dump($bu\_name);
$sql = 'EXEC butablecheck (?)';
$stmt = $db->prepare($sql);
$stmt->bindParam(1, $bu\_name);
$stmt->execute();
Erzeugt folgendes:
string(4) "test"
Und dann auch den Fehler:
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)
>
> > for($j=0;$j<=$groesse\_arr-1;$j++) {
> > $bu\_name = $result[$j][0];
>
> Bitte mal an der Stelle den Inhalt von $bu\_name und $result[$j][0] mit var\_dump() ausgeben.
>
$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();
}
erzeugt:
string(15) "A\_Auckland"
string(15) "A\_Auckland"
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)
Also von demher scheint es wirklich an der Übergabe des Parameters zu liegen. Weil wenn ich statt mit Platzhalter einen Namen für den Table direkt angeb, dann wird es sauber ausgeführt. Ich weiss nur nicht was ich hier falsch mach, weil wenn ich diese vorgehensweise in einem normalen prepared Statement nutze, dann funktioniert es auch.
Vielleicht hat ja noch jemand eine Idee.
Grüße,
hawaii