【问题标题】:Why is this pdo fetch code not giving me what i want [duplicate]为什么这个 pdo 获取代码没有给我我想要的 [重复]
【发布时间】:2019-04-29 15:50:00
【问题描述】:

我有这段代码用于从我的数据库中获取 pdo 中的数据:

<?php 
$stmt = $pdo->query('SELECT `email` FROM hptenant WHERE user_id=:user_id');
while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
    echo $row['email'] . "\n";
} ?>

但是每当我使用它时,它都会使我的页面空白,在此代码显示之后什么都没有(HTML)。 但是,如果我使用这个,

<?php $stmt = $pdo->query('SELECT `email` FROM hptenant');
while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
    echo $row['email'] . "\n";
} ?> 

它将显示我数据库中的电子邮件。有人可以帮帮我吗?

【问题讨论】:

  • 我看不到你从哪里经过:user_id。如果您不向设置为基于变量提取一行数据的查询传递任何内容,您期望会发生什么?
  • 您需要准备,然后执行或绑定/执行。 query 不能使用绑定参数
  • 启用某种形式的错误报告可能值得(如果您还没有)-stackoverflow.com/questions/8776344/… 提供了一种解决方案。

标签: php pdo


【解决方案1】:

看起来你没有绑定任何东西到:user_id

$stmt = $pdo->prepare('SELECT `email` FROM hptenant WHERE user_id=:user_id');
$stmt->bindParam(':user_id', $USER_ID_HERE);
$stmt->execute();
// while loop was unnecessary here (assuming user_id is unique)
$row = $stmt->fetch(PDO::FETCH_ASSOC);
echo $row['email'] . "\n";

【讨论】:

  • WHILE 循环在这里不是必需的,假设没有 2 个用户将拥有相同的 user_id(他们不应该这样)。
  • @GrumpyCrouton 我确定,但我不想偏离原始代码。
  • 我认为修复疏忽不会偏离原始代码,最好向 op 展示 正确 的方法。这个循环增加了 OP 可能没有意识到的不必要的开销。
  • @GrumpyCrouton 你是对的,我已经删除了不需要的循环
  • @John,请让我问这种“愚蠢”的问题,我使用的 user_I'd 和建议的 $USER_ID_HERE 之间有什么区别。我需要申报吗?我是 PHP 新手,尤其是 PDO,所以请耐心等待我的问题。
猜你喜欢
  • 2021-11-14
  • 1970-01-01
  • 2023-01-11
  • 2019-11-17
  • 2016-09-18
  • 2015-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多