【问题标题】:PDO 'fetchAll' return rows with an extra array [duplicate]PDO'fetchAll'返回带有额外数组的行[重复]
【发布时间】:2019-12-08 09:00:46
【问题描述】:

我正在使用 PDO 从数据库中提取一些数据,并且数据返回一个额外的数组,我无法理解它来自哪里。

我可以选择使用call_user_func_array 来“退出”一个数组,我尝试这样做,但这会减慢我的工作速度。

我只是希望我的代码按预期工作,而不是开始弄乱它并使其“脏”。除此之外,我找不到解决方案。

这是我用来提取数据的select 方法:

public function select($whattoselect, $fromwhere, $condition){
      $stmt = $this->pdo->prepare("SELECT {$whattoselect} FROM {$fromwhere} {$condition}");
      $stmt->execute();

      $this->row = $stmt->fetchAll(PDO::FETCH_ASSOC);
      return $this;
}

这就是我打印结果的方式(仅用于故障排除):

echo '<pre>';
print_r($check->row());
echo '</pre>';

这就是我得到的输出:

array(
 0 = array(
  key1 => value1, 
  key2 => value2
 )
)

这就是我想要得到的输出:

array(
 key1 => value1, 
 key2 => value2
)

【问题讨论】:

  • 什么?为什么不期望 fetchAll 返回一个行数组?我的意思是它的名字,“全部”。如果您一次只想要一行,请在循环中调用fetch。阅读 fetchAllfetch 的文档。
  • 看一下,fetchAll 从您的查询结果中返回一个包含所有行的数组,您的查询只有一个结果,所以结果如上所示。您必须使用 $results[0] 来获取第一行(并且仅在您的情况下)
  • @Jonnix 这太简单了,我什至没有想到它我真的很抱歉占用您的时间,尽管您的评论对我非常有用。谢谢。
  • 如果您只想要一行,您也可以将LIMIT 1 添加到您的查询中
  • @Afik​​Habaz 没什么可道歉的。只是要小心你使用它的地方。您的函数select 看起来非常通用,因此始终简单地返回 1 行可能并不是您真正想要的。对您来说更好的选择可能是选择数组中的第一项,稍后当您需要该行时返回,但我不知道您的代码,所以不能确定。

标签: php arrays oop pdo


【解决方案1】:

fetchAll 将返回一个二维数组。

  • 第一个维度是每一行。
  • 第二个维度是该行中的每个字段(键/值对)。

$resultset[0]['fieldname'] 将返回结果集第一行中 fieldname 的值。

您期望 fetchAll 返回单行,而 fetch 就是这样做的。

所以为了简单起见:

  • 如果您的结果集总是只返回一行,请使用fetch
  • 如果您的结果集可以返回多行(或零行),请使用 fetchAll,然后为 each 遍历每一行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-12
    • 2014-01-21
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多