1

次のコードがあります。

[...]

// Escape values
$username = $mysqli->real_escape_string($username);
$password = $mysqli->real_escape_string($password);

// Create the SQL string
$sql = "SELECT * 
FROM users 
WHERE username = '$username' AND password = '$password';";

// Run query
if ($result = $mysqli->query($sql)) {

[...]

さて、私は ChrisB5 というユーザー名を持っています。ChrisB5 は適切なパスワードで正しく検証していますが... chrisb5 は認証に失敗します。私は utf8_unicode_ci を持っているので...データベースは検索時に大文字と小文字を区別しないはずですよね?それが役立つ場合、私のDBタイプはMyISAMです。私は何を間違っていますか?...ありがとう!

編集:
phpmyadmin で次のコードを実行したところ、動作しました... それでも PHP を使用した mysqli は動作しません! これは私には非常に奇妙です...

SELECT *
FROM users
WHERE username= 'chrisb5'
LIMIT 0 , 30

これにより、ChrisB5 のレコードが返されました。

また、サーバーのデフォルトがlatin1であることもわかりました...しかし、提案されているようにデフォルトをutf8に修正しましたが、まだうまくいきません! 試してみる価値がありました。

4

1 に答える 1

0

データベースは検索時に大文字と小文字を区別しないはずですよね?

はい。

私は何を間違っていますか?

誰も実際には知りません。何でもかまいません。ほら、あなたは間接的な
結果 によって判断しています。認証の失敗は、必ずしもエンコーディングに関連しているとは限らない、無数の問題によって引き起こされる可能性があります。

2 つの定数名に対して 2 つのストレート クエリを実行するデバッグ コードは、より確実です。

問題はないはずですが、実行していることを確認してください

$mysqli->set_charset('utf8');

接続後。

于 2013-06-18T06:05:46.117 に答える