0

以下のコードを見てください。これは、データベースに特定のユーザーが含まれているかどうかを確認することになっています。一致する場合は、true を返します。そうでない場合は、false を返します。

とにかく、データベースに存在するユーザーとパスワードに関係なく、何らかの理由で true と評価されません! ! !

function databaseContainsUser($email, $password)
{

    include $_SERVER['DOCUMENT_ROOT'].'/includes/db.inc.php';

    try
    {
        $sql = 'SELECT COUNT(*) FROM wl_user
                WHERE email = :email AND password = :password'; 
        $s = $pdo->prepare($sql);
        $s->bindValue(':email', $email);
        $s->bindValue(':password', $password);
        $s->execute("USE $dbname");
    }
    catch (PDOException $e)
    {
        $error = 'Error searching for user. ' . $e->getMessage();
        include $_SERVER['DOCUMENT_ROOT'].'/includes/error.html.php';
        exit();
    }

    $row = $s->fetch(PDO::FETCH_NUM);

    if ($row[0] > 0)
    {   
        return TRUE;
    }
    else
    {
        return FALSE;
    }
}

どんな助けでもいただければ幸いです

4

2 に答える 2

0

なんらかの理由で"USE $dbname"、実行する文字列を渡しています。
その文字列を削除します。

また、例外をキャッチしようとしていますが、PDO にそれらをスローするように指示していないようです。そして、あなたはメッセージをエコーするためだけにそれをキャッチしています.これは大きなノーノーです. 最近、この回答で正しい方法を説明しました

問題が異なる場合は、質問する必要があります(または、この問題についてはグーグルで調べてください)。データベースの選択やエラー報告などの適切な接続オプションについては、PDO タグ wiki
を 参照してください。

于 2013-03-11T05:25:51.773 に答える
-1

Try this

 try
{
    $pdo = new PDO('mysql:host=localhost;dbname=yourDbName;', 'root', '',
    array(PDO::ATTR_PERSISTENT => true));
    $sql = 'SELECT count(*) FROM user WHERE email = :email AND password = :password'; 
    $s = $pdo->prepare($sql);
    $s->bindValue(':email', $email);
    $s->bindValue(':password', $password);
    $s->execute();
}

This is local server example, just change yourDbName to your db name. I just run this code on my local server and it is working.

于 2013-03-11T07:17:23.033 に答える