PDOでバインディングを使用して、MicrosoftSQLデータベースからいくつかのエントリを選択しようとしています。私が使用しているコードは、ドキュメントで見つけたものと似ているように見えます。ただし、実行すると、以下の警告が表示されます。
警告:PDOStatement :: execute()[pdostatement.execute]:SQLSTATE [42000]:構文エラーまたはアクセス違反:1087 [Microsoft] [SQL Native Client][SQLServer]テーブル変数"@P1"を宣言する必要があります。(SQLExecute [1087] at ext \ pdo_odbc \ odbc_stmt.c:254)in(long file path)on line 40
関連するコードは次のとおりです。
$table = "[User Site]";
$user = "demo";
$sql = "SELECT * FROM ? WHERE user='?'";
$sth = $db->prepare($sql);
$sth->bindValue(1, $table, PDO::PARAM_STR);
$sth->bindValue(2, $user, PDO::PARAM_STR);
$sth->execute(); // <-- line 40
$data = $sth->fetch(PDO::FETCH_ASSOC);
これは関連している可能性があります。疑問符の代わりに名前付きパラメーターマーカー(:table、:user)を使用しようとすると、次のようになります。
警告:PDOStatement :: bindValue()[pdostatement.bindvalue]:SQLSTATE [HY093]:無効なパラメーター番号:パラメーターが39行目の(長いファイルパス)で定義されていません
なぜ私の準備されたステートメントが好きではないのですか?