Help us understand the problem. What is going on with this article?

[FuelPHP]Query BuilderでBinaryオプション付けてデータ取りたい

More than 1 year has passed since last update.

発端

Webアプリケーション開発中、ログインIDとパスワードを要求する管理画面を作成していましたが、テストで"ログインIDが大文字でも通ってしまう"というバグが有ったので、その対処をした時の記録。

そもそも何でそんなガバガバになってんの?

DBにMySQL使っていたんですが、文字コードがutf8mb4で、collationがutf8mb4_general_ciだったので、ログインする時IDとパスワード一致するものをレコードから引っ張ってくる時にDB::select()とかでやってると、ログインIDが大文字だろうと小文字だろうと関係なくログイン通ってしまいます。ました。(ちなみにSQLiteとかだとデフォで区別してくれるらしい。話の分かるやつだ。)

修正

当然where ('login_id', '=', 'BINARY '.'hogehoge')としても、select column from table_name where login_id = 'BINARY hogehoge'となってしまうので意味がない。 ので、こうじゃ。where('login_id', '= BINARY', $username)
まぁDB::expr()で書き直しゃいーじゃんって話なんですが、アローで繋いでるSQL全部書き直すの面倒だったのでこうしました。

そもそも

どちらかと言えばDB作る時に大文字小文字区別したいカラムにBINARYくっつけたり、collation適切に設定する方が正着だと思います。:blush:

AK74
自分用メモ。敗北の記録。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away