-1

最近のプロジェクトで、データベース内のパスワードを照合するときに問題が発生しています。

クエリは次のとおりです。

mysql_query("SELECT * FROM user_accounts WHERE username = '$username' AND password = '$encryptedPass'")

これは出力します

SELECT * FROM user_accounts WHERE username = 'T-McFarlane' AND password = 'äê1\Y¸c'

ユーザーだけで私を見つけることができますが、パスワードでは見つけることができません。データベースのパスワードと暗号化されたパスワードが提供する両方をエコーアウトしましたが、それらはまったく同じです-これはデータベースにあるものですが、一致する行が見つかりません.

私の質問は、このパスワードに特殊文字が含まれているか、またはこれが失敗する他の理由があるのでしょうか?

データベースの照合設定に utf8_swedish_ci と latin1_swedish_ci の両方を試しました。

4

1 に答える 1

0

文字列内の特殊文字をエスケープする必要があります。

$username = mysql_real_escape_string($username);
$encryptedPass = mysql_real_escape_string($encryptedPass);
mysql_query("SELECT * FROM user_accounts WHERE username = '$username' AND password = '$encryptedPass'")

ただし、PDO または mysqli に切り替えて、パラメーター化されたクエリを使用することをお勧めします。

于 2013-08-26T19:47:58.457 に答える