PHPのPDOのことで質問です。$_GET['id'] を MySqlで実

Writer: admin Type: タブレット端末 Date: 2018-12-15 00:00
PHPのPDOのことで質問です。$_GET['id'] を MySqlで実行できる形にエスケープしたいのですが、どうすればいいですか?(Ex: ?id=@1:/12 > 112)mysql_real_escape_stringは使えませんでした。PHPのバージョンは、7.0です。共感した0###先ずは、外部から値を取り込むのですから、その値が妥当なモノであるかを確認しつつ、妥当なモノでなかった場合のデフォルト値(あるいは再入力を促すようなロジック)を用意して取得します。__filter_input() が良いと思います__詳しくはマニュアルをご覧くださいPDO で接続したら、プリペアードステートメントを発行し、取得した値をバインドするなり、そのまま execute() するなりして、SQLの実行結果を取得します。__マニュアルの「例2」が解り易いかなぁ__http://php.net/manual/ja/pdo.prepare.phpと言う手順になるでしょう。ご質問の内容とはズレるかもしれませんが「エスケープ」は PHP上ではやりません。__データベースサーバ側にお任せするナイス0
###「mysql_real_escape_string」などの「mysql系関数」は7.0で廃止されました。http://php.net/manual/ja/function.mysql-real-escape-string.phphttp://phpspot.net/php/man/php/function.mysql-real-escape-string.ht...「mysql_real_escape_string」はSQLを安全に実行したい、というのが本来の目的だったはずで、その手段として「特殊文字をエスケープする」というのが考えられたはずです。その結果として「特殊文字のエスケープでなくPreaped Statementとしてプレースホルダに実行時に値をセットして実行する」形が安全性の面で優れていると判断されてPDOが基本のアクセスメソッドになりました。なのでPDOを使うのにSQLをエスケープしようとするのはアプローチとして違っていると思います。どんなSQLに対して「$_GET['id'] 」をどこにセットして実行したいのかを補足したほうが解決が速いと思います。$_GET,$_POSTについては変数の存在チェック必要な気もしますが。ナイス0
###いまいち何をしようとしているのかわからないので、実際のPDOのソースを載せてもらった方が分かるかもしれません。PDOの基本的な使い方はこんな感じです。$sth = $pdo->prepare("SELECT ID FROM テーブル名 WHERE ID=:ID");$sth->execute([':ID' => $_GET['id']]);$result = $sth->fetchAll();print_r($result);ナイス0
###できません。MySQLとPHPはそれぞれ別々のプログラムなので、バラバラに混ざった状態のコードが正しく動くようにはできません。MySQLを正しく動作させるには、MySQLが正しく動作するコードを、PHPコードとは別々に組むしかないです。なお、もとよりそういうつもりの質問だった場合、そもそも何がしたかったのかの経緯を補足した方がいいように思います。ナイス0

 

TAG