5

MySQLPHPを使用しています。私のデータベースには、このテーブルがusersあり、テーブル内にusersレコードがあります。

ユーザー名: 管理者

パスワード: パスワード

ログインページで、(パスワード:パスワード)としてログインしようとしました:

  • ユーザー名: ADMIN -> 結果: ログインできます
  • ユーザー名: 管理者 -> 結果: ログインできます

ユーザー名をすべて小文字の「admin」としてデータベースに保存します。

私の PHP 認証ページには、strtolower() 関数が含まれていませんでした。PHP では、送信したユーザー名フォーム フィールドで大文字と小文字が区別されないということですか?

4

5 に答える 5

11

それはPHPではありません。大文字と小文字が区別されないのは、データベース クエリです。

オペランドの 1 つをバイナリ文字列にすることもできます。例えば:

SELECT 'abc' LIKE 'ABC';

1これは、またはを返しtrueます。その間

SELECT 'abc' LIKE BINARY 'ABC';

0またはを返しfalseます。

于 2009-08-18T06:58:47.247 に答える
3

そうです、ランデルが言ったように、大文字と小文字を区別するのはデータベースです。Can we make MySQL to be casesensitive for SELECT query and can we force a column in MySQL to be always lowercase?については、この記事を確認してください。.

于 2009-08-18T07:09:34.793 に答える
1

はっきりする前に行く方法があると思います...

MySQLはクエリに対して大文字と小文字を区別しません。SELECTとselectは同じ意味です。

テーブル内のデータはそのまま保存されますが、情報はクエリでしか得られないため、慎重に表現する必要があります。

ランデルが言ったように

select 'abc' like 'ABC'

SELECT 'abc' like 'ABC'LIKEは大文字と小文字の違いを無視するため、TRUEを返します(そうします)

select 'abc' like binary 'ABC'

SELECT 'abc' LIKE BINARY 'ABC'LIKE BINARYはより注意深く見えるため、FALSEを返します(そしてそうなります)。バイナリレベルで違いがあります。

于 2009-08-18T07:55:01.533 に答える
0

ユーザー名フォームフィールドであることをどのように知る必要がありますか?

私の記憶が正しければ、*nix ではユーザー名の大文字と小文字が区別されませんでした。ライブラリを使用してユーザー情報を保存し、比較していますか?

于 2009-08-18T06:59:25.093 に答える
-1

ログイン時に、保存したテーブルでユーザー名とパスワードが同じであることを検証するクエリを作成する必要があると思います。

于 2009-08-18T07:06:10.150 に答える