我有这段代码:
while ($i = $res->fetchArray(SQLITE3_ASSOC))
{
$items[] = $i;
}
我试着把它整理成这样:
while ($items[] = $res->fetchArray(SQLITE3_ASSOC));
它看起来非常令人满意,但我现在在数组的末尾得到一个额外的元素(当调用fetchArray()
返回false时)。有没有一种方法可以写出这个语句,而不会在最后得到额外的元素?
如果您使用PDO作为数据库库,您应该使用fetchAll()
方法(文档)
$items = $stmt->fetchAll(PDO::FETCH_ASSOC)
这将为您提供一个二维关联数组。它的索引从0到n-1,其中n是获取的行数,每行包含一个以列名作为索引的数组。例如:
$items[3]['id']
将包含存储在第4行id列中的值。
如果你使用mysqli_*,有mysqli_fetch_all(),但不鼓励这样做,因为它比mysqli_fetch_array()的循环更昂贵,或者文档是这样说的。
如果您正在使用第三方库,请参阅所提供的文档。如果没有提供或没有fetchAll
等价物,这是质量差的标志。删除它并使用本机PDO。
既然你正在使用SQLITE3驱动程序,我建议你看看这个页面:SQLITE (PDO),它解释了如何使用PDO与SQLITE3。相信我,这是值得的。很可能你不会长期坚持SQLITE,当你迁移到MySQL或PostgreSQL时,你会感谢我的阅读。
PDO的主要优点是(通常)对用户透明,不知道下面是哪个DB。因此,如果您更改数据库,它不应该破坏您的应用程序,只需更改PDO连接字符串,这就足够了。
Try
while(($item=$res->fetchArray(SQLITE3_ASSOC))&&$items[]=$item);