当未找到行或没有更多行时,fetchColumn 返回布尔值 false。
(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.9.0)
PDOStatement::fetchColumn — 从结果集的下一行返回单个列
从结果集的下一行返回单个列,如果不再有行,则返回 false
。
注意:
PDOStatement::fetchColumn() 不应该用于检索布尔列,因为无法区分
false
值和没有更多行可检索。请改用 PDOStatement::fetch()。
column
要从行中检索的列的 0 索引编号。如果未提供值,则 PDOStatement::fetchColumn() 将检索第一列。
PDOStatement::fetchColumn() 从结果集的下一行返回单个列,如果不再有行,则返回 false
。
如果您使用 PDOStatement::fetchColumn() 检索数据,则无法从同一行返回另一列。
如果属性 PDO::ATTR_ERRMODE
设置为 PDO::ERRMODE_WARNING
,则发出级别为 E_WARNING
的错误。
如果属性 PDO::ATTR_ERRMODE
设置为 PDO::ERRMODE_EXCEPTION
,则抛出 PDOException。
示例 #1 返回下一行的第一列
<?php
$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();
print "从结果集的第一行中获取第一列:\n";
$result = $sth->fetchColumn();
print "name = $result\n";
print "从结果集的第二行中获取第二列:\n";
$result = $sth->fetchColumn(1);
print "colour = $result\n";
?>
上面的示例将输出
Fetch the first column from the first row in the result set: name = lemon Fetch the second column from the second row in the result set: colour = red
这是一个用于返回列数的极好方法。例如
<?php
$db = new PDO('mysql:host=localhost;dbname=pictures','user','password');
$pics = $db->query('SELECT COUNT(id) FROM pics');
$this->totalpics = $pics->fetchColumn();
$db = null;
?>
在我的情况下,$pics->fetchColumn() 返回 641,因为我的数据库中有 641 张图片。
从 mysqli 迁移时,重要的是,虽然 mysqli_result::fetch_column 将迭代后续行,但 PDOStatement::fetchColumn 不会!
<?php
while ( $row0 = $db->query("SELECT `value` FROM `bool`")->fetchColumn(0) ) {
var_dump( $row0 );
}
?>
是一个无限循环,除非表 bool 的第一行的第一列是“0”。