sqlite создает 2 базы данных при включении из разных каталогов - PullRequest
0 голосов
/ 29 марта 2012

Итак, у меня есть такой класс:

class Db {
    protected static $dbh = false;

    function connect(){
        try {
        self::$dbh = new PDO("sqlite:./test.db");
        self::$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        self::$dbh->exec("CREATE TABLE IF NOT EXISTS news (id INTEGER PRIMARY KEY AUTOINCREMENT, tytul TEXT, tresc TEXT, data DATE, wazne TINYINT(1))");
        } catch (PDOException $e) {
            echo $e->getMessage();
        }

    }
}

Есть еще что-то вроде функций выборки и т. Д. У меня этот класс хранится так:

|otherfile.php
|admin
  |inc/db.inc
  |somefile.php

Так что моя проблемакогда я требую ('db.inc');изнутри somefile.php и использования класса он создает новый test.db в папке «admin».Но когда я требую его в файле "otherfile.php" и использую класс, он создает отдельный файл test.db в той же папке, что и "otherfile.php".Как я могу заставить его использовать один файл, все еще используя относительный путь к БД?

edit: Лично я считаю, что это будет работать лучше всего:

function connect(){
    try {
    $dir = __DIR__.'/test.db';
    self::$dbh = new PDO("sqlite:".$dir);
    self::$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    self::$dbh->exec("CREATE TABLE IF NOT EXISTS news (id INTEGER PRIMARY KEY AUTOINCREMENT, tytul TEXT, tresc TEXT, data DATE, wazne TINYINT(1))");
    } catch (PDOException $e) {
        echo $e->getMessage();
    }

}

Это работает локальнос моей настройкой xampp, но, к сожалению, не работает на удаленном сервере.

edit: Наконец-то понял, см. ответ.

Спасибо за ответы в любом случае: -)

Ответы [ 2 ]

0 голосов
/ 30 марта 2012

Наконец-то понял, что у моей локальной установки php есть php> версия 5.3, версия на удаленном сервере была ниже 5.3, поэтому __DIR__ не было доступно, и мне пришлось использовать dirname(__FILE__) вместо этого, и в конце концов он работал как предназначен:

function connect(){
    try {
    $dir = dirname(__FILE__).'/test.db';
    self::$dbh = new PDO("sqlite:".$dir);
    self::$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    self::$dbh->exec("CREATE TABLE IF NOT EXISTS news (id INTEGER PRIMARY KEY AUTOINCREMENT, tytul TEXT, tresc TEXT, data DATE, wazne TINYINT(1))");
    } catch (PDOException $e) {
        echo $e->getMessage();
    }

}
0 голосов
/ 29 марта 2012

Вы можете передать путь к вашей функции подключения

function connect($path_to_sql_db) {
  try {
    self::$dbh = new PDO("sqlite:"+$path_to_sql_db);
    self::$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    self::$dbh->exec("CREATE TABLE IF NOT EXISTS news (id INTEGER PRIMARY KEY AUTOINCREMENT, tytul TEXT, tresc TEXT, data DATE, wazne TINYINT(1))");
    } catch (PDOException $e) {
        echo $e->getMessage();
    }


}

Поскольку ваши файлы находятся в разных местах, один и тот же относительный путь не будет работать, как вы наблюдаете.

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