CakePHP и SQLite: фатальная ошибка: вызов функции-члена query () для необъекта - PullRequest
1 голос
/ 24 января 2011

Я изучаю учебник на веб-сайте CakePHP, но решил вместо этого использовать базу данных SQLite.Я создал одну таблицу и поместил файл базы данных, где находятся остальные файлы сайта.

Однако при вызове ~ username / public_html / site / speaker / я получаю следующую ошибку:

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 ]

3 голосов
/ 27 января 2011

Глядя на доступные основные источники данных , нет ни одного, называемого sqlite3.Я подозреваю, что config базы данных побуждает CakePHP попытаться загрузить этот файл.Пожалуйста, проверьте, что вы определили подключение к вашей базе данных следующим образом:

var $default = array(
    'driver' => 'sqlite', // not 'sqlite3'
    'database' => '../database_name.sqlite', // db in /app directory
);

Хорошо, это (сейчас) мое понимание ситуации:

  • Для SQLite 2.x PHP использует функции sqlite_xxx(), предоставляемые расширением базы данных PHPite SQLite..Это то, что в настоящее время поддерживается основным источником данных CakePHP sqlite.(Примечание: глядя на ваш комментарий ниже, кажется, что у вас в данный момент не включено это расширение PHP.)

  • Для SQLite 3.x PHP использует класс SQLite3(), предоставленныйРасширение базы данных PHP SQLite3 .Это не поддерживается как текущим основным источником данных CakePHP sqlite, так и предоставленным сообществом sqlite3 источником данных.

  • Однако предоставленный сообществом источник данных sqlite3 использует PDO()класс, предоставляемый более новым расширением PDO PHP и драйвером PDO SQLite .

Так что, хотя и не поддерживается CakePHP, похоже, что вы хотитеиспользуйте драйвер sqlite3, чтобы избежать использования неподдерживаемой версии SQLite.:)

В любом случае, причина появления ошибки в вашем вопросе была объяснена в последнем комментарии к билету в Trac , на который вы ссылались.С тех пор билет был перенесен в Lighthouse и помечен как wont-fix.

Источник данных, однако, превратился в сообщество Плагин источников данных на GitHub,но выглядит в основном непроверенным и история коммитов , похоже, не говорит о том, что проблема была исправлена.

В любом случае, я бы скачал эту последнюю версию источника данных, ноКажется, ваша проблема существует именно потому, что вызов new PDO() (на том, что сейчас line 167 ) не возвращает объект PDO, поскольку он не может подключиться к базе данных.Надеюсь, это даст вам отправную точку для устранения проблемы.Попробуйте посыпать debug($this->config); debug($this->connection);, чтобы проверить, что идет не так.

0 голосов
/ 27 июля 2012

Похоже, у вас не включен sqlite для php.Попробуйте это: установить sqlite3:

sudo aptitude install sqlite3

установить php5-sqlite

sudo aptitude install php5-sqlite
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...