当包含来自不同目录时,sqlite创建2个数据库

时间:2012-03-29 13:07:34

标签: php sqlite

所以我得到了这样的课程:

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();
        }

    }
}

还有更多像fetch函数等。我有这样的类存储:

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

所以我的问题是我需要的时候('db.inc');从somefile.php中使用该类,它在文件夹“admin”中创建一个新的test.db。但是当我在文件“otherfile.php”中需要它并使用该类时,它会在与“otherfile.php”相同的文件夹中创建一个单独的test.db文件。如何强制它使用一个文件,同时仍然使用db的相对路径?

编辑: 就个人而言,我认为这将是最好的:

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设置本地工作,但不能在远程服务器上工作。

编辑:最后想出来,看看答案。

无论如何,谢谢你的答案: - )

2 个答案:

答案 0 :(得分:0)

您可以将路径传递给连接函数

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();
    }


}

由于您的文件位于不同的位置,因此您将观察到相同的相对路径不起作用。

答案 1 :(得分:0)

最后想通了,我的本地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();
    }

}