0

看看下面的代码。这应该检查数据库是否包含给定用户。如果是,它只返回 true。如果不是,则返回 false。

无论如何,无论数据库中存在的用户名和密码如何,由于某种原因它不会评估为真!!!

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
{
    $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();
}

这是本地服务器示例,只需将 yourDbName 更改为您的数据库名称。我只是在我的本地服务器上运行此代码并且它正在工作。

于 2013-03-11T07:17:23.033 回答