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 个备注

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

但是,在这一点上再调用一次 fetchArray() 将重置回结果集的开头,并再次返回第一个结果。这似乎没有明确记录,并且在我弄清楚之前,让我自己头疼了一段时间。

例如

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

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

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

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

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

<?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);
?>
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