我想获取两个不同的特定列,我已经测试了这个,它清楚地表明第二个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>';
}
答案 0 :(得分:2)
php手册说:
(1)fetchColumn()不应该用来检索布尔列 不可能将FALSE的值与不再存在的值区分开来 要检索的行
(2)如果是,则无法从同一行返回另一列 您使用PDOStatement :: fetchColumn()来检索数据。
相反,您可以使用fetch()方法执行此操作,如下所示:
$result = $stmt->fetch(PDO::FETCH_ASSOC);
$user = $result['user_column'];
$admin = $result['admin_column'];