mysqlの危険回避の質問です。
(私がした1つ前に質問したものでは、解決しなかったので再度表現を変えて行います。)
mysqlでwhere句の値に
1 OR effective=0
が入ると危険であり、シングルクオテーションで回避できる、とあるサイトでみました。
それを踏まえ、それまで以下の(1)で動いていたものを(2)にしたら、動かなくなりました。
そこで質問です。
(初めてphpに触れた人に教えるレベルで、かなり噛み砕いて教えていただけたら幸いです。)
■(1)はそのままでは危険という認識でよろしいですか?
■(2)はなぜ動かないのでしょうか?
■(1)を危険のない(もしくは可能な限り危険のない)書き方をするとしたらどうしたら
いいでしょうか?(PDOで書く事!やmysqliがいい、というのは知っています。
どうしてもmysql_real_escape_stringを使わなくてはいけないという条件があったと
想定して強引にやるとしたらどうか、という事でお答えをいただければと思います。)
(1)
$sql = sprintf("SELECT id , password FROM `adminDatabase` where id = '%s' and password = '%s' order by id",
mysql_real_escape_string($id),mysql_real_escape_string($password));
(2)
$id = "'" . mysql_real_escape_string($id) . "'";
$password = "'". mysql_real_escape_string($password) . "'";
$sql = sprintf("SELECT id , password FROM `adminDatabase` where id = '%s' and password = '%s' order by id",$id , $password );
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
>(1)で動いていたものを(2)にしたら、動かなくなりました
そういうのはprint $sqlしてみて見比べればわかりますよね?
'%s' のところにシングルクォーテーション付きの文字列を入れれば
クォーテーションがダブってます。
あまりお勧めできませんが、あえてやるなら元文字列のシングルクォーテーションを
はずしてみればよいのでは?
$sql = sprintf("SELECT id , password FROM `adminDatabase` where id = %s and password = %s order by id",$id , $password );
ズブの素人なので、大変ありがたいご説明助かります。
printしてチェックというのは、目からウロコでした。
そうチェックするんですね~。
また変な質問にお付き合いいただいた事に感謝です。
本当にありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL 参考書に従って入力したつもりでしたが、最後はエラーがでました。 1 2022/09/28 03:45
- MySQL `picture` varchar(255) のコマンドで間違いないでしょうか? 1 2022/11/21 04:08
- MySQL 共通点はあります。何が違うのでしょうか? 1 2023/01/27 05:22
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- PHP php my adminより取り出したデータ表示 2 2022/06/15 11:56
- MySQL エラー 1068 (42000): 複数の主キーが定義されていますエラー 2 2022/11/17 04:36
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- PHP Q&Aサイトを作成していてURLの生成方法について迷っているのでアドバイスお願い致します 1 2023/08/10 16:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
#1062 - '0' は索引 'PRIMARY' ...
-
WHERE `年月日` = '晴' OR `年...
-
PhpMyAdminで作成して実行せよ...
-
mysqlがインストールされている...
-
あってますか?SQL
-
SQLを作ったのですがうまくいき...
-
〜のような結果を出すためのSQL...
-
下の画像はSQLの4大命令の性質...
-
書籍の内容はまともでしょうか?
-
SQLです。こんな感じですか?あ...
-
エラー 1068 (42000): 複数の主...
-
SQLでカラムを追加し、条件に合...
-
【初歩】ラジオボタンをつかっ...
-
参考書に従って入力したつもり...
-
Mac です。ローカルホストの ph...
-
MySQLでcreateが使えない MySQL...
-
SQLです教えてくださいお願いし...
-
テーブル名が可変の場合のクエ...
-
共通点はあります。何が違うの...
-
MySQL NULLだけをカウントして...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
#1062 - '0' は索引 'PRIMARY' ...
-
テーブル名が可変の場合のクエ...
-
SQLでカラムを追加し、条件に合...
-
テーブル:生徒名簿 生徒名簿の...
-
SELECT * FROM `生徒名簿` INNE...
-
SQL構文です 画像のようにした...
-
〜のような結果を出すためのSQL...
-
このSQLあってますか?教えてく...
-
MySQLのテーブル作成でハイフン...
-
初心者Mysqlの関数のsubstring...
-
SQLです!!教えてください。あ...
-
参考書に従って入力したつもり...
-
SQLです!!教えてください。あ...
-
SQLです!!教えてください。あ...
-
データベースの接続に失敗して...
-
SQLで漢字名称を都道府県や市区...
-
SQLあってますか?こう?
-
エラー 1068 (42000): 複数の主...
-
`picture` varchar(255) のコマ...
-
【初歩】ラジオボタンをつかっ...
おすすめ情報