所以我得到了这样的课程:
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设置本地工作,但不能在远程服务器上工作。
编辑:最后想出来,看看答案。
无论如何,谢谢你的答案: - )
答案 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();
}
}