他の人のために機能するコードを使用して、特定のケースでブールエラーが発生する理由を理解しようとしているphpの初心者です。後でセッションで使用される $user_id を返す関数があります。彼の機能は次のとおりです。
function login($username, $password) {
$user_id = user_id_from_username($username);
$username = sanitize($username);
$password = sha1($password);
return (mysql_result(mysql_query("SELECT COUNT (user_id) FROM users WHERE username = '$username' AND password = '$password'"), 0) == 1) ? $user_id : false ;
}
これは常に失敗しますerror: Warning: mysql_result() expects parameter 1 to be resource, boolean given in
。この行を指す行番号を付けます。
return (mysql_result(mysql_query("SELECT COUNT (`user_id`) FROM users WHERE username = '$username' AND password = '$password'"), 0) == 1) ? $user_id : false ;
なぜこれが失敗するのですか? クエリが成功したかどうかとテスト結果を確認するには、これで十分ではないでしょうか。DB 接続と sql クエリは正しいように見えました。' を使用するかどうかは問題ではありません。数時間の調査の後、ifステートメントでエラーを取り除くことができました。そのようです :
function login($username, $password) {
$user_id = user_id_from_username( $username );
$username = sanitize( $username );
$password = sha1( $password );
$result = mysql_query("SELECT COUNT (user_id) FROM users WHERE username = '$username'AND password = '$password'");
if ( $result == 1 ) {
return $user_id;
} else if ( $result == 0 ) {
return false;
}
}
最初の関数ではなく、2 番目の関数が機能する理由を知りたいです。クエリをチェックするために if ステートメントを使用する必要がありますか? この関数を記述するより良い方法がある場合は、提案してください。:)