PHP MYSQL if语句对PDO的结果

时间:2013-03-11 05:20:14

标签: php mysql if-statement pdo fetch

浏览下面的代码。这应该检查数据库是否包含给定用户。如果是,它只返回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;
    }
}

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:0)

由于某种未知原因,您要传递"USE $dbname"字符串来执行 删除该字符串。

此外,您正在尝试捕获异常,但显然不会告诉PDO抛出它们。 而你只是为了回应一条信息,这是一个很大的禁忌。 我最近在this answer

中解释了正确的方法

如果你的问题不同,你必须问(或者更好 - 谷歌这个问题) 有关正确的连接选项,请参阅PDO tag wiki,包括数据库选择和错误报告。

答案 1 :(得分:-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更改为您的数据库名称即可。我只是在我的本地服务器上运行此代码,它正在运行。