【问题标题】:How do you fetch data using PDO?如何使用 PDO 获取数据?
【发布时间】:2015-05-07 13:35:18
【问题描述】:

我对 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() 函数已经执行时,如何获取数据呢?

【问题讨论】:

  • $num_rows 是一个字符串,包含结果中的第一列,在本例中为 'adminuser'$num_rows['user'] 正在尝试访问该字符串中的字符,其中字符串 'user' 是索引。由于索引需要一个整数,'user' 被强制转换为 0,并且您最终检索到字符串中的第一个字符:adminuser][0] -> 'a'

标签: php pdo


【解决方案1】:

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

你有两个选择:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    • 2013-09-12
    相关资源
    最近更新 更多