0

他の人のために機能するコードを使用して、特定のケースでブールエラーが発生する理由を理解しようとしている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 ステートメントを使用する必要がありますか? この関数を記述するより良い方法がある場合は、提案してください。:)

4

1 に答える 1

1

おそらくクエリにエラーがあるので、mysql_query戻りますfalse

交換:

return (mysql_result(mysql_query("SELECT COUNT (user_id) FROM users WHERE username = '$username' AND password = '$password'"), 0) == 1) ? $user_id : false ;

と:

$result = mysql_query("SELECT COUNT(user_id) as count FROM users WHERE username = '$username' AND password = '$password'") or die(mysql_error());

return (mysql_result($result, 0, 'count') == 1) ? $user_id : false ;

mysql エラーが表示されます。

于 2013-03-25T13:59:35.027 に答える