【问题标题】:PHP PDO query not returning any data, isset() showing data is returnedPHP PDO 查询不返回任何数据,返回显示数据的 isset()
【发布时间】:2020-02-21 01:54:34
【问题描述】:

我有一些基本的 php 代码,它尝试根据数据库中的用户名和密码进行身份验证。如果用户和通行证成功匹配,则应该打印“已验证”。但是,查询没有返回任何数据。此外,我用来检查是否返回任何数据的 isset() 表明数组中有值。

这里出了什么问题,我怎样才能让这个 pdo 查询返回请求的数据?

这是有问题的代码。

    $stmt = $pd->prepare("SELECT username from users where username = :logon and password = :passwd");
    $stmt->bindParam(':logon', $_POST['username'], PDO::PARAM_STR);
    $stmt->bindParam(':passwd', $_POST['password'], PDO::PARAM_STR);
    $stmt->execute();
    $verify_auth = $stmt->fetchAll();
    if(isset($verify_auth)){
       echo "Authenticated locally";
       $authed = 1;
       //do something here
    }
    elseif($authed != 1){
        echo "<b>Failure to authenticate</b>";
    }

即使凭据错误,每次运行“本地身份验证”时也是如此。

即使使用正确的凭据,verify_auth 数组似乎也始终为空。

post 参数分配成功。

【问题讨论】:

标签: php postgresql pdo


【解决方案1】:

fetchAll() 总是返回一个数组,你需要检查它是否为空。 此外,在检查 $verify_auth 之后,您将 $authed 设置为 1,结果是永远不会执行最后一个条件块(以防 $authed != 1)。相反,您可以通过简单的else 使其有用。这是它的外观示例。

$stmt = $pd->prepare("SELECT username from users where username = :logon and password = :passwd");

$stmt->bindParam(':logon', $_POST['username'], PDO::PARAM_STR);
$stmt->bindParam(':passwd', $_POST['password'], PDO::PARAM_STR);
$stmt->execute();
$verify_auth = $stmt->fetchAll();

if ($verify_auth) {
  echo "Authenticated locally";
  $authed = 1;
  //do something here
} else {
  echo "<b>Failure to authenticate</b>";
}

isset() 非常有用,但在这种特殊情况下并非如此。它检查变量集,所以即使它有一个空值,它也会被设置,isset() 会给你true。但是如果有一个不存在的变量或数组索引,它会给出false。在您的特定情况下,您可以使用isset($verify_auth[0]),当$stmt-&gt;fetchAll() 返回的数组中有内容时,它将为您提供true

【讨论】:

  • 这不适用于正确的凭据,数组始终为空。
  • 我认为代码是正确的,可能您以与此处使用的名称不同的名称传递表单中的 POST 参数,或者凭据错误,或者您连接到不同的数据库?我真的不知道。尝试echo POST 值或手动执行 SQL 以确保它在此代码之外返回正确的数据。
  • 感谢帮助,原来我在数据库中的新表存在权限问题。
  • 当你的意思是if ($verify_auth)时,不要使用!empty。见kunststube.net/isset
  • 谢谢@deceze,这是一篇非常有用且有趣的文章。我会相应地编辑答案。
猜你喜欢
  • 2020-09-22
  • 1970-01-01
  • 2013-11-20
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-24
相关资源
最近更新 更多