一畳のくつろぎタイム

このブログでは紹介する商品画像をAmazonアソシエイトより借りています。画像やリンクにはアフィリエイト広告が含まれる事があります

2018年4月24日火曜日

PDOで表の名前にはプレースホルダーが使えない

ダメなコード

  1. // PDOによる接続
  2. $pdo = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8','test','password');
  3. // DBエラーで例外を発生させる
  4. $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  5. // プリペアステートメントのエスケープ設定
  6. $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
  7. $stmh = $pdo->prepare("select * from :table");
  8. $stmh->bindValue(":table", "mytable");
  9. $stmh->execute();

show tableを実行して得た結果からテーブルを選ばせてその情報を取得しようとしたがSyntaxエラーとなる。

FROM句にプレースホルダーを使うことは少ないが、これはできないらしい。
自分で無害化するか、表名自体を表に出さないような作りにする必要がある。

参考
https://stackoverflow.com/questions/15182910/php-pdo-bind-table-name