サイトの簡単なログイン機能を構築していますが、問題が発生しました。サイトにログインしようとすると、ユーザー名とパスワードが一致しないというエラーが表示され続けます。もちろん、これは私が自分で定義したエラーですが、問題は、この場合はエラーになるべきではないということです。
パスワードの計算されたハッシュを出力し、この手順が適切に実行されたことを確認しました。この後、走りました
SELECT * FROM members WHERE user='username' AND pass='hashed_password';
私のMySQLデータベースに直接、ユーザー名とハッシュを直接提供します。これにより、目的の値が返されました。私のPHPコードは次のようになります。
$dsn = "mysql:host=localhost;dbname=my_db";
$u = "localhost";
$pdo = new PDO($dsn,$u);
$query = $pdo->prepare("SELECT * FROM members WHERE user=':username' AND pass=':hashed_pass'");
$query->execute(array(':username'=>$username,':hashed_pass'=>$hashed_pass));
$result = $query->fetch();
if($result){
//Log in user
}else{
//Print error
}
これは何も返しません。正しい値を指定しても、エラーが発生し続けます。何が問題の原因なのかはわかりませんが、推測すると、文字セットに関係していると言えます。私のデータベースはUTF-8を使用しています。ただし、 ISO-8859エンコーディングを使用してSSHを介してデータベースに直接クエリを実行すると、MySQLから目的の結果が得られました..だから、よくわかりません。どんな助けでも大歓迎です!