ユーザーが入力したと仮定する
mysite.com/profile?identity=1
mysite.com/profile?identity=dinodsja
mysite.com/profile?identity=1a
価値を得る
$identity = $_GET['identity']; // identity can be user_id or user_name
簡単な選択クエリがあります:
SELECT * FROM lb_users WHERE (user_id = 'dinodsja' OR user_name = 'dinodsja') AND user_status = 1
問題なく動作します。しかし、問題は次のとおりです。
SELECT * FROM lb_users WHERE (user_id = '1a' OR user_name = '1a') AND user_status = 1
このクエリを実行すると結果も返されます条件を満たさずに。
テーブル構造:
user_id bigint(25)
user_name varchar(50) utf8_general_ci
**
-> Is this a MySQL Bug ?
-> How can we avoid this ?
-> What will be the query ?
**
ベストアンサー1
その理由は、列のデータ型user_ID
が整数であるためです。
MySQL サイレント末尾の 非数値(そして、それに続くもの) が値に含まれており、 が値から削除されるため が と1a
等しくなる理由です。1
a