MySQL が WHERE 句に一致しない行を返すのはなぜですか? 質問する

MySQL が WHERE 句に一致しない行を返すのはなぜですか? 質問する

ユーザーが入力したと仮定する

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等しくなる理由です。1a

おすすめ記事