两个fetchColumns彼此相邻不起作用

时间:2017-12-08 05:20:48

标签: php pdo

我想获取两个不同的特定列,我已经测试了这个,它清楚地表明第二个fetchColumn不起作用,因为我试图回应它,但它只回应了第一个fetchColumn

这是代码:

$stmt = $pdo->prepare('SELECT * FROM logins WHERE login_name = :username');
$criteria = ['username' => $_POST['Username']];
$stmt->execute($criteria);
$user = $stmt->fetchColumn(1);
$admin = $stmt->fetchColumn(6);
if (password_verify($_POST['Password'], $user) && !empty($admin)) {
    $_SESSION['adminlogin'] = true;
    $_SESSION['loggedin'] = true;
    $_SESSION['adminloginname'] = $_POST['Username'];
    header('location: adminpage.php');
} 
elseif (password_verify($_POST['Password'], $user)) {
    $_SESSION['loggedin'] = true;
    $_SESSION['username'] = $_POST['Username'];
    header('location: latestarticles.php');
    } else {
        echo '<p> Wrong password </p>';
    }
}

我希望此代码检查$ admin变量是否具有值,如果确实如此,则获得管理员权限,否则您将获得正常的用户权限。但$ admin = $ stmt-&gt; fetchColumn(6);没有显示任何结果。

更新:我刚尝试过的一件事是在第一个fetchColumn下添加另一个搜索查询,它可以正常运行但肯定不是唯一的方法,必须有更简单的方法。 我的代码现在看起来像这样:

$stmt = $pdo->prepare('SELECT * FROM logins WHERE login_name = :username');
$criteria = ['username' => $_POST['Username']];
$stmt->execute($criteria);
$user = $stmt->fetchColumn(1);
$stmt = $pdo->prepare('SELECT * FROM logins WHERE login_name = :username');
$criteria = ['username' => $_POST['Username']];
$stmt->execute($criteria);
$admin = $stmt->fetchColumn(6);
if (password_verify($_POST['Password'], $user) && !empty($admin)) {
    $_SESSION['adminlogin'] = true;
    $_SESSION['loggedin'] = true;
    $_SESSION['adminloginname'] = $_POST['Username'];
    header('location: adminpage.php');
} 
 elseif (password_verify($_POST['Password'], $user)) {
    $_SESSION['loggedin'] = true;
    $_SESSION['username'] = $_POST['Username'];
    header('location: latestarticles.php');
    } else {
        echo '<p> Wrong password </p>';
    }

1 个答案:

答案 0 :(得分:2)

php手册说:

  

(1)fetchColumn()不应该用来检索布尔列   不可能将FALSE的值与不再存在的值区分开来   要检索的行

     

(2)如果是,则无法从同一行返回另一列   您使用PDOStatement :: fetchColumn()来检索数据。

相反,您可以使用fetch()方法执行此操作,如下所示:

$result = $stmt->fetch(PDO::FETCH_ASSOC);
$user = $result['user_column'];
$admin = $result['admin_column'];

以下是PHP手册参考:http://php.net/manual/en/pdostatement.fetch.php