Php 返回空字符串的PDO fetch()
我感到非常沮丧。我有两个具有类似“说明”的函数,即:从数据库中的用户表返回值 第二个可以正常工作,但是第一个返回空值 代码如下:Php 返回空字符串的PDO fetch(),php,mysql,pdo,mysqli,Php,Mysql,Pdo,Mysqli,我感到非常沮丧。我有两个具有类似“说明”的函数,即:从数据库中的用户表返回值 第二个可以正常工作,但是第一个返回空值 代码如下: public function ValidateUser($username, $password) { $stmt = "SELECT password FROM users WHERE username = :username LIMIT 1"; if(!($grabUser = $this->db->prepare($stmt)))
public function ValidateUser($username, $password)
{
$stmt = "SELECT password FROM users WHERE username = :username LIMIT 1";
if(!($grabUser = $this->db->prepare($stmt)))
{
return null;
}
$grabUser->bindParam(":username", $username, PDO::PARAM_STR);
$grabUser->execute();
$data = $grabUser->fetch();
if(count($grabUser->fetchColumn()) <= 0)
{
return null;
}
echo $data['password'].'s';
if(!password_verify($password,$data['password']))
{
return null;
}
return $this->core->encrypt($data['password']);
}
public函数ValidateUser($username,$password)
{
$stmt=“从用户名=:用户名限制1”的用户中选择密码”;
如果(!($grabUser=$this->db->prepare($stmt)))
{
返回null;
}
$grabUser->bindParam(“:username”,$username,PDO::PARAM_STR);
$grabUser->execute();
$data=$grabUser->fetch();
if(count($grabUser->fetchColumn())core->encrypt($data['password']);
}
我试图在页面上显示$data['password'],只是为了测试它是否从数据库返回值,但是它只是返回空值,而查询返回一列,因为它通过了
if(count($grabUser->fetchColumn()) <= 0)
{
return null;
}
if(count($grabUser->fetchColumn())db->prepare($stmt)))
{
返回null;
}
$grabUser->bindParam(“:email”,$email,PDO::PARAM_STR);
$grabUser->bindParam(“:fb”,$fid,PDO::PARAM_INT);
$grabUser->execute();
$data=$grabUser->fetch();
if(count($grabUser->fetchColumn())core->encrypt($data['password']);
}
在这种情况下,它会转换用户名和密码。为什么它在第一个函数中不起作用
谢谢。有关详细信息,请参阅手册。您可以看到,这将获取下一个结果集。因此,如果您已经调用了fetch()
,那么根据您的代码,应该不会有下一个结果集:
$data = $grabUser->fetch();
if(count($grabUser->fetchColumn()) <= 0)
{
return null;
}
$data=$grabUser->fetch();
如果(count($grabUser->fetchColumn())否,则不应将->fetchColumn
和->fetch
以及限制1混用
发生的情况是,您已经->fetch()
了第一行。在调用->fetchColumn()
之后,就没有更多的行要提取了
public function ValidateUser($username, $password)
{
$stmt = "SELECT password FROM users WHERE username = :username LIMIT 1";
if(!($grabUser = $this->db->prepare($stmt))) {
return null;
}
$grabUser->bindParam(":username", $username, PDO::PARAM_STR);
$grabUser->execute();
$data = $grabUser->fetch(); // fetch once
// no need to add ->fetchColumn checking
$ret = null;
if(!empty($data['password']) && password_verify($password,$data['password'])) {
$ret = $this->core->encrypt($data['password']);
}
return $ret;
}
如果您在phpMyAdmin中使用它,是否有返回的数据?我将尝试一下。谢谢:)而不是使用空($data)您可以使用count($data)吗?另外,如果您所说的是这样的话,为什么它与我的ValidateFacebookUser()函数完美配合,它与有问题的函数具有相同的基本结构?@zuc001是的,您可以直接在$data
上使用count
,因为如果找不到行,它将是空的。我的建议是不要依赖于fetchColumn
必须使用count()。但它返回的是列,只是没有获取密码值@ZUC001我不知道您在那里有什么输入,请确保$data
在读取最后一个之前不为空,如果使用var\u dump()
阻塞。我发现了错误!我使用PDO quote()创建了一个名为$core->input()的函数,该函数将文本包装为“”。因此,它是不正确的。
public function ValidateUser($username, $password)
{
$stmt = "SELECT password FROM users WHERE username = :username LIMIT 1";
if(!($grabUser = $this->db->prepare($stmt))) {
return null;
}
$grabUser->bindParam(":username", $username, PDO::PARAM_STR);
$grabUser->execute();
$data = $grabUser->fetch(); // fetch once
// no need to add ->fetchColumn checking
$ret = null;
if(!empty($data['password']) && password_verify($password,$data['password'])) {
$ret = $this->core->encrypt($data['password']);
}
return $ret;
}