需要从SQLite3Result获取所有结果到多阵列

时间:2014-07-15 09:26:16

标签: php sqlite

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的任何替代方案?感谢

4 个答案:

答案 0 :(得分:2)

我遇到了同样的问题。像上面的ka_lin这样的巨魔是如此令人疲惫,因为他们认为通过回答有效的问题而没有实际提供有用的信息他们在某种程度上有所帮助。或许他们只是想出现成为房间里最聪明的家伙,但真的没有一个怪异的线索。 (叹息)

无论如何,这是一个应该做的技巧。

function resultSetToArray($queryResultSet){
    $multiArray = array();
    $count = 0;
    while($row = $queryResultSet->fetchArray(SQLITE3_ASSOC)){
        foreach($row as $i=>$value) {
            $multiArray[$count][$i] = $value;
        }
        $count++;
    }
    return $multiArray;
}

可能有一种方法可以让某人稍微优化它,并且它没有像Php刚刚为SQLite3保留fetchArray()那么快,但它似乎对我来说很好。

答案 1 :(得分:1)

尝试

  

$ multiarray = $ results-> fetchArray();

而不是

$multiarray  = $results->fetchAll(SQLITE_ASSOC);

答案 2 :(得分: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)时,你不会有这样的麻烦

答案 3 :(得分:1)

这是从php中app.UseCookiePolicy();的数据库中获取数据的最简单方法

app.UseMVC();