PHP Conference Japan 2024

PDOStatement::setFetchMode

(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.2.0)

PDOStatement::setFetchMode 设置此语句的默认提取模式

描述

public PDOStatement::setFetchMode(int $mode): bool
public PDOStatement::setFetchMode(int $mode = PDO::FETCH_COLUMN, int $colno): bool
public PDOStatement::setFetchMode(int $mode = PDO::FETCH_CLASS, string $class, ?array $constructorArgs = null): bool
public PDOStatement::setFetchMode(int $mode = PDO::FETCH_INTO, object $object): bool

参数

mode

提取模式必须是 PDO::FETCH_* 常量之一。

colno

列号。

class

类名。

constructorArgs

构造函数参数。

object

对象。

返回值

成功返回 true,失败返回 false

示例

示例 #1 设置提取模式

下面的示例演示了 PDOStatement::setFetchMode() 如何更改 PDOStatement 对象的默认提取模式。

<?php
$stmt
= $dbh->query('SELECT name, colour, calories FROM fruit');
$stmt->setFetchMode(PDO::FETCH_NUM);
foreach (
$stmt as $row) {
print
$row[0] . "\t" . $row[1] . "\t" . $row[2] . "\n";
}

以上示例将输出类似于以下内容:

apple   red     150
banana  yellow  250
orange  orange  300
kiwi    brown   75
lemon   yellow  25
pear    green   150

添加备注

用户贡献的笔记 3 条笔记

Dormilich at netscape dot net
14 年前
如果您想将结果提取到一个类中(使用 PDO::FETCH_CLASS),并且希望在 PDO 分配对象属性 *之前* 执行构造函数,则需要使用 PDO::FETCH_PROPS_LATE 常量

<?php
$stmt
= $pdo->prepare("your query");

$stmt->setFetchMode(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE, "className", $constructorArguments);

# 传递参数,如果查询需要
$stmt->execute($parameters);

foreach (
$stmt as $row)
{
// 对(每个)对象执行某些操作
}
?>
Kats
7 年前
了解如何从函数访问命名空间非常有用。我花了一分钟(和谷歌)才弄明白。在这种情况下,::class 属性将是您最好的朋友。

<?php
$stmt
->setFetchMode(PDO::FETCH_CLASS, Name\Space\Class::class);
?>
stein_AT_rhrk.uni-kl.de
17 年前
关于 PDO :: FETCH_CLASS | PDO :: FETCH_CLASSTYPE 的一些说明

我花了一些时间才意识到,当您想从数据库中检索对象而类型由结果集中的第一列定义时,您不能在 $stm->setFetchMode() 中使用此提取模式。
您必须直接在 $stm->fetch() 方法中定义此模式。

为了更清楚

$stm = $pdo->query("SELECT * FROM `foo`);
$stm->setFetchMode(FETCH_CLASS | PDO :: FETCH_CLASSTYPE);

$object = $stm->fetch();

不会返回预期的对象,而

$stm = $pdo->query("SELECT * FROM `foo`");

$object = $stm->fetch(FETCH_CLASS | PDO :: FETCH_CLASSTYPE);

将为您提供在 `foo` 的第一列中定义的类的对象。
To Top