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,那会有用的我知道,我只是问在仍然使用相对路径的情况下是否可能。这是不可能的,因为您将从不同的位置访问该类,而相对路径将不起作用。我将答案编辑到我的问题中,因为我无法回答自己。