如何使用PDO获取数据?

时间:2015-03-06 00:35:43

标签: php pdo

我在PHP中对PDO相当新,我试图制作一个简单的登录表单。我需要能够获取数据并且似乎无法使用fetchColumn(),我需要检查用户和密码是否匹配。

$query = "SELECT * FROM administrator
          WHERE user = :user
          AND pass = :pass";

$res = $db->prepare($query);

$params = array("user" => $username, "pass" => $password);
$res->execute($params);
$num_rows = $res->fetchColumn(1);

if ($num_rows) {
    $_SESSION['user'] = $num_rows['user'];
    header('Location: .');
    exit();
} else {
    echo "Failure";
}

if (isset($_SESSION['user'])): ?>
    <p>Hello, <?= $_SESSION['user']; ?>! This is admin content.</p>
    <a href=".?p=logout">Logout</a>
    <?php endif; ?>

使用此代码时,使用用户名adminuser,输出为:

"Hello, a! This is admin content."

应该是:

"Hello, adminuser! This is admin content."

那么,当fetchColumn()函数已被执行时,如何获取数据呢?

1 个答案:

答案 0 :(得分:0)

我认为你误解了fetchColumn的作用。它只会返回一个值。

您有两种选择:

  1. $num_rows['user']更改为$num_rows(顺便说一下,奇怪的命名约定)。在这里,我假设你实际上是在确定正确的列。请参阅下面有关使用*
  2. 的说明

    1. 使用$res->fetch(PDO::FETCH_ASSOC)代替fetchColumn,它将返回一个包含行中所有值的关联数组(然后您可以继续使用$num_rows['user']
    2. 访问该数组

      如果选择选项1,我强烈建议您定义SELECT语句中应返回的列。将fetchColumnSELECT * FROM一起使用非常脆弱,因为如果添加新字段,列的顺序可能会发生变化。说实话,你很少应该使用*,所以我可能在任何情况下指定列。