- // 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