2024 日本 PHP 研討會

PDOStatement::setFetchMode

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

PDOStatement::setFetchMode 設定此陳述式 (Statement) 的預設擷取模式

說明

public PDOStatement::setFetchMode(int $mode): bool
public PDOStatement::setFetchMode(int $mode = PDO::FETCH_COLUMN, int $colno): bool
公開 PDOStatement::setFetchMode(整數 $mode = PDO::FETCH_CLASS, 字串 $class, ?陣列 $constructorArgs = null): 布林
公開 PDOStatement::setFetchMode(整數 $mode = PDO::FETCH_INTO, 物件 $object): 布林

參數

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 則註解

35
Dormilich at netscape dot net
14 年前
如果您想將結果擷取到一個類別中(使用 PDO::FETCH_CLASS),並且希望在 PDO 指派物件屬性 *之前* 執行建構子,則需要使用 PDO::FETCH_PROPS_LATE 常數。

<?php
$stmt
= $pdo->prepare("您的查詢");

$stmt->setFetchMode(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE, "類別名稱", $constructorArguments);

# 如果查詢需要,請傳遞參數
$stmt->execute($parameters);

foreach (
$stmt as $row)
{
// 使用(每個)物件執行某些操作
}
?>
9
Kats
7 年前
一個非常有用的技巧是了解如何從函式中存取命名空間。我花了一點時間(和 Google)才弄清楚。在這種情況下,::class 屬性將成為您最好的朋友。

<?php
$stmt
->setFetchMode(PDO::FETCH_CLASS, Name\Space\Class::class);
?>
2
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