看一下下面的代码。这应该检查数据库是否包含给定的用户。如果它做了,它就返回真。如果没有,则返回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;
}
}
如有任何帮助,不胜感激
由于某些未知的原因,您正在传递"USE $dbname"
字符串来执行
去掉那个字符串。
同样,你试图捕获一个异常,但显然没有告诉PDO抛出它们。你捕捉它只是为了回显一个消息,这是一个大禁忌。我最近在这个回答中解释了正确的方法
如果你的问题是不同的,你必须问(或者更好-谷歌这个问题)。
参考PDO标记wiki获取正确的连接选项,包括数据库选择和错误报告。
试试这个
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更改为您的数据库名称。我只是在我的本地服务器上运行这段代码,它正在工作。