SQLite3(PHP 致命错误:调用成员函数 exec())


<?php
require 'INewsDB.class.php';
class NewsDB implements INewsDB
{
    protected $_db;
    const DB_NAME = '/home/petrov/public_html/mysite/news.db';
    function __construct()
    {
        if (is_file(self::DB_NAME)) {
            $this->_db = new SQLite3(self::DB_NAME);
        } else {
            $sql = "CREATE TABLE msgs(id INTEGER PRIMARY KEY AUTOINCREMENT,
                    title TEXT,
                    category INTEGER,
                    description TEXT,
                    source TEXT,
                    datetime INTEGER)";
            $this->_db->exec($sql) or die($this->_db->lastErrorMsg());//!!!!
            $sql = "CREATE TABLE category(id INTEGER,name TEXT)";
            $this->_db->exec($sql) or die($this->_db->lastErrorMsg());

$news = new NewsDB;
?>
error apache.log:
[Wed Apr 08 23:24:04.918051 2015] [:error] [pid 29353] [client 127.0.0.1:51137] PHP Fatal error:  Call to a member function exec() on a non-object in /home/petrov/public_html/mysite/news/NewsDB.class.php on line 20

我一直在客栈

sudo apt-get install php5-sqlite
sudo apt-get install php-sqlite3
sudo apt-get install sqlite

并添加 conf:

extension=pdo.so
extension=pdo_sqlite.so
extension=sqlite.so

我已经安装了必要的组件并添加到配置文件行中,也许在 php 中.ini需要添加一些东西吗?

除非我错过了某些东西,否则您的protected $_db可能永远不会被设置,因此您无法在 null 上调用 exec((。如果这不等于 true,它永远不会被设置——

if (is_file(self::DB_NAME)) {
     $this->_db = new SQLite3(self::DB_NAME);
} else {

你应该检查你的类的逻辑

最新更新