PHP Conference Japan 2024

SQLite3Result::fetchArray

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

SQLite3Result::fetchArray 将结果行作为关联或数字索引数组或两者都获取

描述

public SQLite3Result::fetchArray(int $mode = SQLITE3_BOTH): array|false

将结果行作为关联或数字索引数组或两者都获取。默认情况下,作为两者都获取。

参数

mode

控制如何将下一行返回给调用方。此值必须是以下之一:SQLITE3_ASSOCSQLITE3_NUMSQLITE3_BOTH

  • SQLITE3_ASSOC:返回一个由相应结果集中返回的列名索引的数组

  • SQLITE3_NUM:返回一个由相应结果集中返回的列号索引的数组,从列 0 开始

  • SQLITE3_BOTH:返回一个由相应结果集中返回的列名和列号都索引的数组,从列 0 开始

返回值

将结果行作为关联或数字索引数组或两者都返回。或者,如果不再有行,则返回 false

返回数组的值的类型从 SQLite3 类型映射如下:如果整数适合 PHP_INT_MIN..PHP_INT_MAX 范围,则映射到 int,否则映射到 string。浮点数映射到 floatNULL 值映射到 null,字符串和 Blob 映射到 string

添加注释

用户贡献的注释 4 个注释

18
Jason
10 年前
只想指出为了澄清,每次调用 fetchArray() 都将 SQLite3Result 中的下一个结果返回到一个数组中,直到没有更多结果,此时下一个 fetchArray() 调用将返回 false。

但是,此时对 fetchArray() 的额外调用将重置回结果集的开头,并再次返回第一个结果。这似乎没有明确记录,并且在我弄清楚之前,导致我自己也遇到了一些麻烦。

例如

<?php
$returned_set
= $database->query("select query or whatever");

//假设查询返回了 3 个结果
//通常,以下 while 循环将运行 3 次,然后,因为 $result 直到对 fetchArray() 的第四次调用才会为 false
while($result = $returned_set->fetchArray()) {
//但是,在循环中进行额外的调用将导致循环再次运行
$returned_set->fetchArray();
}
?>

基本上,在上面的代码中,fetchArray 将返回
第一次调用 | $returned_set 的第一个结果(来自 while 条件的 fetchArray() 调用)
第二次调用 | 第二个结果(来自 while 块的 fetchArray() 调用)
第三次调用 | 第三个结果(来自 while 条件的 fetchArray() 调用)
第四次调用 | FALSE(来自 while 块的 fetchArray() 调用)
第五次调用 | 第一个结果(来自 while 条件的 fetchArray() 调用)
....

这将导致(至少在这种情况下)while 循环无限运行。
11
paule-panke at example dot com
7 年前
在调用 SQLite3Result::fetchArray() 之前,使用 SQLite3Result::numColumns() 检查空结果。

与文档相反,SQLite3::query() 始终返回 SQLite3Result 实例,而不仅仅是返回行的查询(SELECT、EXPLAIN)。每次在无结果查询的结果上调用 SQLite3Result::fetchArray() 时,都会在内部重新执行查询,这很可能会破坏您的应用程序。
对于框架或 API,不可能事先知道查询是否会返回行(SQLite3 支持多语句查询)。因此,参数“不要执行 query('CREATE ...')”无效。
2
alan at synergymx dot com
14 年前
循环遍历记录集

<?php
$db
= new SQLite3('auth.sqlite');

$sql = "SELECT user_id, username, opt_status FROM tbl_user";

$result = $db->query($sql);//->fetchArray(SQLITE3_ASSOC);

$row = array();

$i = 0;

while(
$res = $result->fetchArray(SQLITE3_ASSOC)){

if(!isset(
$res['user_id'])) continue;

$row[$i]['user_id'] = $res['user_id'];
$row[$i]['username'] = $res['username'];
$row[$i]['opt_status'] = $res['opt_status'];

$i++;

}

print_r($row);
?>
0
ghaith at cubicf dot net
7 年前
// 打开一个新的 sqlite3 数据库

$db = new SQLite3('./DB_EHLH.db');

// 从 "algorithm" 表中选择所有信息

$results= $db->query("select * from algorithm");

// 创建数组以保存所有结果
$data= array();

// 获取关联数组 (1 表示 SQLITE3_ASSOC)
while ($res= $results->fetchArray(1))
{
// 将行插入数组
array_push($data, $res);

}

// 可以返回一个 JSON 数组
echo json_encode($data);

// 输出如下所示
[
{"id":1,"algorithm":"GA"},
{"id":2,"algorithm":"PSO"},
{"id":3,"algorithm":"IWO"},
{"id":4,"algorithm":"OIWO"}
]
To Top