与
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
SQLite3
中从数据库获取数据的最简单方法
$db = new SQLite3('mysqlitedb.db');
$results = $db->query('SELECT bar FROM foo');
while ($row = $results->fetchArray()) {
var_dump($row);
}
正如评论中所述,您可以扩展如下内容:
<?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)时,你不会有这样的头痛
这是将所有行读入数组的一种方法:
$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+ 上测试)
创建一个单独的函数来获取所有内容
function sqliteFetchAll(\SQLite3Result $results): array
{
$multiArray = [];
if ($results) {
while($result = $results->fetchArray(SQLITE3_ASSOC)) {
array_push($multiArray, $result);
}
}
return $multiArray;
}
尝试
$multiarray = $results->fetchArray();
而不是
$multiarray = $results->fetchAll(SQLITE_ASSOC);