1

URLに入力された変数値と一致する場合にMySQLデータベースからデータを選択することを目的としたSQL selectステートメントがあるため、URLに追加された場合、12に等しい?id=12データベース行を返す必要があります.id

URL に奇数の値を入力してスクリプトを壊そうとしたときに、この奇妙な問題に遭遇しました。ユーザーが URL に数字の後にテキストを入力すると、URL に入力された文字列の数値部分と一致し、例えば:

...index.php?id=12agsgs

はレコード where と一致しますがid = 12、これは意図したものではありません。

テキストが数字の前に表示される場合、予想どおり、エラーまたは空の結果が返されます。

...index.php?id=agsgs12

空またはエラーを返します。

すべてがとてもシンプルです。GET変数へのコードは次のとおりです。

if (isset($_GET['id'])) {
    $id = $dbConnect->real_escape_string($_GET['id']);
}

SQL 選択コードは次のとおりです。

$sql = "SELECT * FROM `tablename` WHERE `id` = '$id'" ;

のフィールドidtablename、自動インクリメント整数インデックス フィールドです。したがって、入力.../index.php?id=12agsgsすると空の結果が返されます。

本当に明らかなことを見逃していませんか?これは非常に奇妙に思え、何が起こっているのか理解できません。いつものようにどんな助けでも大歓迎です!

4

2 に答える 2

2

これは、列が数値であることを認識しているため、 MySQL が "役立つように"12agsgs数値に変換します (そして 12 になります) 。比較idを行うことで停止させることができます:BINARY

SELECT * FROM `tablename` WHERE BINARY `id` = '$id'
于 2013-06-13T17:13:42.670 に答える