如何使用 PDO 获取数据?
How do you fetch data using 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()函数已经执行完了,如何获取数据呢?
我认为您误解了 fetchColumn 的作用。它只是 return 一个单一的值。
您有两个选择:
- 将
$num_rows['user']
更改为 $num_rows
(顺便说一句,奇怪的命名约定)。在这里,我假设您实际上是在定位正确的列。请参阅下面关于使用 *
的注释
或
- 使用
$res->fetch(PDO::FETCH_ASSOC)
而不是 fetchColumn,这将 return 一个包含行中所有值的关联数组(然后您可以使用 $num_rows['user']
继续访问
如果您选择选项 1,我强烈建议您在 SELECT 语句中定义应 return 的列。使用 fetchColumn
和 SELECT * FROM
非常脆弱,因为如果添加新字段,列的顺序可能会改变。老实说,无论如何你都很少使用 *
,所以我可能会在任何情况下指定列。
我对 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()函数已经执行完了,如何获取数据呢?
我认为您误解了 fetchColumn 的作用。它只是 return 一个单一的值。
您有两个选择:
- 将
$num_rows['user']
更改为$num_rows
(顺便说一句,奇怪的命名约定)。在这里,我假设您实际上是在定位正确的列。请参阅下面关于使用*
的注释
或
- 使用
$res->fetch(PDO::FETCH_ASSOC)
而不是 fetchColumn,这将 return 一个包含行中所有值的关联数组(然后您可以使用$num_rows['user']
继续访问
如果您选择选项 1,我强烈建议您在 SELECT 语句中定义应 return 的列。使用 fetchColumn
和 SELECT * FROM
非常脆弱,因为如果添加新字段,列的顺序可能会改变。老实说,无论如何你都很少使用 *
,所以我可能会在任何情况下指定列。