需要从 SQLite3Result 获取所有结果到多数组

问题描述 投票:0回答:5

php
sql3lite
相关的问题。我想从
SQLite3Result
获取多数组。我发现功能正是我所需要的
http://php.net/manual/en/sqlite3result.fetcharray.php

我尝试(php代码):

$results = $db->query('SELECT * FROM table');
$multiarray  = $results->fetchAll(SQLITE_ASSOC);

但是得到:

Fatal error: Call to undefined method SQLite3Result::fetchAll() in 

问题出在哪里?好像这个功能已经从

php5
中删除了?有什么替代方法可以得到
multiarray
?谢谢

php sqlite
5个回答
3
投票

这是在 php

SQLite3
中从数据库获取数据的最简单方法

$db = new SQLite3('mysqlitedb.db');
$results = $db->query('SELECT bar FROM foo');
while ($row = $results->fetchArray()) {
    var_dump($row);
}

1
投票

正如评论中所述,您可以扩展如下内容:

<?php
$x = new SQLite3_1('xx.db');
//see: http://www.icosaedro.it/phplint/phplint2/doc/modules/sqlite3.html
class SQLite3_1 extends SQLite3
{
    public function __construct($filename,int $flags = 6, string $encryption_key = "")
    {
        parent::__construct($filename,$flags,$encryption_key);
    }
    public function fetchAll()
    {
        //own implementation with a FOR (is faster than a foreach)
    }
    public function numberResults()
    {
        //helpfull
    }
}
?>

它并不像你所说的那么优雅,但是当迁移到不同的服务器(和不同版本的 PHP)时,你不会有这样的头痛


0
投票

这是将所有行读入数组的一种方法:

$db = new \SQLite3("database.dat", SQLITE3_OPEN_READWRITE); //open DB
$result = $db->query("SELECT * FROM main"); //SQL query

$resultArray = $result->fetchArray(SQLITE3_ASSOC); //temporary variable to store each row
$multiArray = array(); //array to store all rows

while($resultArray !== false){
    array_push($multiArray, $resultArray); //insert all rows to $multiArray
    $resultArray = $result->fetchArray(SQLITE3_ASSOC); //read next row
}

unset($resultArray); //unset temporary variable

//now all rows are now in $multiArray
var_dump($multiArray);

当不再需要读取行时,

$result->fetchArray(SQLITE3_ASSOC);
返回
false
。因此,我们只需运行一个循环,直到发生这种情况,然后将每个数组推入多维数组
$multiArray

(在 PHP 7+ 上测试)


0
投票

创建一个单独的函数来获取所有内容

function sqliteFetchAll(\SQLite3Result $results): array
{
    $multiArray = [];

    if ($results) {
       while($result = $results->fetchArray(SQLITE3_ASSOC)) {
           array_push($multiArray, $result);
        }
   }

   return $multiArray;
}

-1
投票

尝试

$multiarray = $results->fetchArray();

而不是

$multiarray = $results->fetchAll(SQLITE_ASSOC);
© www.soinside.com 2019 - 2024. All rights reserved.