我正在关注CakePHP网站上的教程,但决定使用SQLite数据库。我制作了一个表,并将数据库文件放在其他站点文件所在的位置。
然而,当调用~username / public_html / site / speakers /时,我收到以下错误:
Fatal error: Call to a member function query() on a non-object in /home/username/public_html/site/cake/libs/model/datasources/dbo/dbo_sqlite3.php on line 133
SpeakersController的源代码:
<?php
class SpeakersController extends AppController {
var $name = 'Speakers';
var $helpers = array ('Html','Form');
function index(){
$this->set('speakers', $this->Speaker->find('all'));
}
}
?>
答案 0 :(得分:3)
查看可用的core datasources,没有一个名为sqlite3
。我怀疑database config正在提示CakePHP尝试加载此文件。请检查您是否已定义数据库连接,如下所示:
var $default = array(
'driver' => 'sqlite', // not 'sqlite3'
'database' => '../database_name.sqlite', // db in /app directory
);
好的,这是(现在)我对情况的理解:
对于SQLite 2.x,PHP使用PHP SQLite database extension提供的sqlite_xxx()
函数。这是核心CakePHP sqlite
数据源当前支持的内容。 (注意:看下面的评论,似乎你现在没有启用这个PHP扩展。)
对于SQLite 3.x,PHP使用PHP SQLite3 database extension提供的SQLite3()
类。当前核心CakePHP sqlite
数据源和社区提供的sqlite3
数据源都不支持此功能。
但是,社区提供的sqlite3
数据源使用PHP较新的PDO extension和SQLite PDO driver提供的PDO()
类。
因此,尽管CakePHP不支持,但看起来您希望使用sqlite3
驱动程序以避免使用不受支持的SQLite版本。 :)
无论如何,问题中出现错误的原因已在您关联的ticket in Trac的最后评论中说明。该票据已经migrated over to Lighthouse并标记为wont-fix
。
然而,数据源已经在GitHub上进入了社区Datasources plugin,但看起来很untested而且commit history似乎没有表明问题已得到解决。< / p>
无论如何我会下载这个最新版本的数据源,但是你的问题似乎特别存在,因为new PDO()
调用(现在是line 167)并没有返回PDO
对象,因为它无法连接到数据库。
希望这可以为您提供调试问题的起点。尝试在debug($this->config); debug($this->connection);
中进行检查,以检查出现了什么问题。
答案 1 :(得分:0)
看起来你没有为php启用sqlite。试试这个: 安装sqlite3:
sudo aptitude install sqlite3
安装php5-sqlite
sudo aptitude install php5-sqlite