CakePHP和SQLite:致命错误:在非对象上调用成员函数query()

时间:2011-01-24 05:43:38

标签: cakephp sqlite

我正在关注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'));
}
}
?>

2 个答案:

答案 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 extensionSQLite 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