• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【PHP】PDOでのMysqlから値を取り出す時に)

PHP PDOでのMySQLから値を取り出す方法

このQ&Aのポイント
  • PHPの学習中にPDOオブジェクトを使用してMySQLから値を取得する方法を学びました。prepareメソッドでクエリを準備し、executeメソッドで実行します。
  • しかし、クエリ内に「?」が含まれる場合には問題が発生します。エスケープやバインド変数の方法を考える必要があります。
  • エスケープする方法やバインド変数として扱わない方法を知りたいです。他の解決策があれば教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

少し、調べてみましたが、?は全てバインドされてしまうようです。 めぼしい情報も見つけられませんでした。 大概少し特殊な情報も、PHPマニュアルのコメント欄なんかに書いてあることがありますが、ソレも無いようです。 解決策は、 ・プリペアドステートメントを使わない ・テーブル名を変更する のどちらかしか無いと思います。 ただ、今後のメンテナンスなども含めて考えると、テーブル名に半角英数以外の文字が入っているのは 少し実装としては厄介ではないかなと思います。 規模が大きくなり、フレームワークを利用することになった場合、フレームワークのORマッパーを使うことになると思いますが、 その場合でも、プリペアドステートメントのところで毎回引っかかるようなことになりそうです。

phpthanperl
質問者

お礼

回答ありがとうございます。 prepareかexecuteはoptionでバインド無効にできるかな~と思い調べていましたが やはりありませんねぇ(^-^;) 確かに将来的にフレームワークを使ってデータベースを操作するとなると テーブル名にややこしい記号が入ってるとまたエラーで苦しむことになりそうなので おとなしくテーブル名を変更するようにします。 ありがとうございました!

その他の回答 (1)

回答No.1

そもそもテーブル名に?は利用できないと思いますが。

phpthanperl
質問者

補足

返信ありがとうございます。 phpmyadmin上からSQL実行、 またはperlのDBI上から、 PHPのPDOのprepare,execute経由でのSQL実行で試しましたが どのやり方でも、テーブル名に?を利用できました。 またデータベース名も可能でした。 記述し忘れていましたが 環境はMysql のVersion 5.5.25です。

関連するQ&A