- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【PHP】PDOでのMysqlから値を取り出す時に)
PHP PDOでのMySQLから値を取り出す方法
このQ&Aのポイント
- PHPの学習中にPDOオブジェクトを使用してMySQLから値を取得する方法を学びました。prepareメソッドでクエリを準備し、executeメソッドで実行します。
- しかし、クエリ内に「?」が含まれる場合には問題が発生します。エスケープやバインド変数の方法を考える必要があります。
- エスケープする方法やバインド変数として扱わない方法を知りたいです。他の解決策があれば教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
少し、調べてみましたが、?は全てバインドされてしまうようです。 めぼしい情報も見つけられませんでした。 大概少し特殊な情報も、PHPマニュアルのコメント欄なんかに書いてあることがありますが、ソレも無いようです。 解決策は、 ・プリペアドステートメントを使わない ・テーブル名を変更する のどちらかしか無いと思います。 ただ、今後のメンテナンスなども含めて考えると、テーブル名に半角英数以外の文字が入っているのは 少し実装としては厄介ではないかなと思います。 規模が大きくなり、フレームワークを利用することになった場合、フレームワークのORマッパーを使うことになると思いますが、 その場合でも、プリペアドステートメントのところで毎回引っかかるようなことになりそうです。
その他の回答 (1)
- めとろいと(@naktak)
- ベストアンサー率36% (785/2139)
回答No.1
そもそもテーブル名に?は利用できないと思いますが。
質問者
補足
返信ありがとうございます。 phpmyadmin上からSQL実行、 またはperlのDBI上から、 PHPのPDOのprepare,execute経由でのSQL実行で試しましたが どのやり方でも、テーブル名に?を利用できました。 またデータベース名も可能でした。 記述し忘れていましたが 環境はMysql のVersion 5.5.25です。
お礼
回答ありがとうございます。 prepareかexecuteはoptionでバインド無効にできるかな~と思い調べていましたが やはりありませんねぇ(^-^;) 確かに将来的にフレームワークを使ってデータベースを操作するとなると テーブル名にややこしい記号が入ってるとまたエラーで苦しむことになりそうなので おとなしくテーブル名を変更するようにします。 ありがとうございました!