我尝试学习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 )
这是什么?我应该搜索什么来学习和理解它是如何工作的?我会很感激任何简单的解释。谢谢。
答案 0 :(得分:2)
这取决于您返回PDO对象的方式。它被称为fetch样式,是fetch方法的输入。您可以通过多种方式返回
如果你这样做,你可以获得第一个对象
$stmt->fetch(PDO::FETCH_NUM);
它会将列作为数字返回
如果你获取关联数组
,你得到第二个$stmt->fetch(PDO::FETCH_ASSOC);
这也恰好是默认
答案 1 :(得分: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_BOTH
和PDO::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();