// PDOによる接続 $pdo = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8','test','password'); // DBエラーで例外を発生させる $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // プリペアステートメントのエスケープ設定 $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); $stmh = $pdo->prepare("select * from :table"); $stmh->bindValue(":table", "mytable"); $stmh->execute();
show tableを実行して得た結果からテーブルを選ばせてその情報を取得しようとしたがSyntaxエラーとなる。
FROM句にプレースホルダーを使うことは少ないが、これはできないらしい。
自分で無害化するか、表名自体を表に出さないような作りにする必要がある。
参考
https://stackoverflow.com/questions/15182910/php-pdo-bind-table-name