Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php sqlite在包含来自不同目录的数据库时创建2个数据库_Php_Sqlite - Fatal编程技术网

Php sqlite在包含来自不同目录的数据库时创建2个数据库

Php sqlite在包含来自不同目录的数据库时创建2个数据库,php,sqlite,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->e

所以我上了这样的课:

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
还有更多类似于获取函数等的功能。我将此类存储为:

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中,使用它在文件夹admin中创建新test.db的类。但是当我在文件otherfile.php中需要它并使用该类时,它会在与otherfile.php相同的文件夹中创建一个单独的test.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设置中可以在本地工作,但在远程服务器上不起作用

编辑:终于弄明白了,请参见答案


无论如何,感谢您的回答:-

您可以传递连接函数的路径

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


}

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

最终解决了这个问题,我的本地php设置为php>5.3版,远程服务器上的版本低于5.3,因此无法使用DIR\u DIR\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

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

}

在引用数据库时,尝试在DB类上使用完整路径,而不是./yeah,那会有用的我知道,我只是问在仍然使用相对路径的情况下是否可能。这是不可能的,因为您将从不同的位置访问该类,而相对路径将不起作用。我将答案编辑到我的问题中,因为我无法回答自己。