【问题标题】:PDO type of arrays and how they workPDO 类型的数组及其工作方式
【发布时间】:2015-07-25 14:03:24
【问题描述】:

我尝试学习 php pdo。我正在阅读教程。

$smt = $db->prepare("SELECT * FROM table1 WHERE id = :id");
$smt->bindValue(':id', 1);
$smt->execute();
$row = $smt->fetch();

他们说 $row 给出了一个关联数组。我搜索关联数组,我希望如果我 print_r($row);我要这个:

Array (0 => 1, 1 => Column1Row1, 2 => Column2Row1);

但是我有这个:

Array ( [id] => 1 [0] => 1 [Column1] => Column1Row1 [1] => Column1Row1 [Column2] => Column2Row1 [2] => Column2Row1 )

这是什么?我应该搜索什么来学习和理解它是如何工作的?我将不胜感激任何简单的解释。谢谢。

【问题讨论】:

    标签: php arrays pdo


    【解决方案1】:

    这取决于您如何返回 PDO 对象。它称为 fetch 样式,是 fetch 方法的输入。您可以通过多种方式退货

    如果你这样做,你可以获得第一个对象

    $stmt->fetch(PDO::FETCH_NUM);
    

    它将以数字形式返回列

    如果你获取关联数组,你会得到第二个

    $stmt->fetch(PDO::FETCH_ASSOC);
    

    这也恰好是默认设置

    【讨论】:

      【解决方案2】:

      您似乎同时获得了关联值和索引值。此行为由PDO::FETCH_* 常量控制。这是默认行为。

      PDOStatement::fetch() documentation:

      PDO::FETCH_ASSOC: 返回一个按您的结果集中返回的列名索引的数组

      PDO::FETCH_BOTH(默认):返回一个由列名和 0 索引列号索引的数组,如结果集中返回的那样

      PDO::FETCH_BOUND:返回TRUE,并将结果集中列的值分配给通过PDOStatement::bindColumn()方法绑定到的PHP变量

      PDO::FETCH_CLASS:返回请求类的新实例,将结果集的列映射到类中的命名属性。如果 fetch_style 包含 PDO::FETCH_CLASSTYPE(例如 PDO::FETCH_CLASS | PDO::FETCH_CLASSTYPE),则类的名称由第一列的值确定。

      PDO::FETCH_INTO:更新请求类的现有实例,将结果集的列映射到类中的命名属性

      PDO::FETCH_LAZY:结合PDO::FETCH_BOTHPDO::FETCH_OBJ,在访问对象变量名时创建它们

      PDO::FETCH_NAMED:返回一个与PDO::FETCH_ASSOC形式相同的数组,除了如果有多个同名的列,则该键引用的值将是该行中所有值的数组有那个列名

      PDO::FETCH_NUM:返回一个数组,该数组由结果集中返回的列号索引,从第 0 列开始

      PDO::FETCH_OBJ:返回一个匿名对象,其属性名称对应于结果集中返回的列名

      所以你想要做的是像这样使用这些常量之一:

      $smt = $db->prepare("SELECT * FROM table1 WHERE id = :id");
      $smt->bindValue(':id', 1);
      $smt->execute();
      $row = $smt->fetch(PDO::FETCH_ASSOC);
      

      您还可以像这样设置默认获取模式:

      $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
      $smt = $db->prepare("SELECT * FROM table1 WHERE id = :id");
      $smt->bindValue(':id', 1);
      $smt->execute();
      $row = $smt->fetch();
      

      【讨论】:

        猜你喜欢
        • 2013-04-18
        • 2015-08-13
        • 2014-08-19
        • 2011-04-13
        • 2015-05-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-05
        相关资源
        最近更新 更多