2012-03-29 13 views
0

So einschließlich bekam ich eine Klasse wie folgt:SQLite erzeugt 2 Datenbanken, wenn aus verschiedenen Verzeichnissen

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

    } 
} 

es mehr ist wie Funktionen holen etc. Ich habe diese Klasse wie folgt gespeichert:

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

Also mein Problem ist, wenn ich brauche ('db.inc'); aus der Datei somefile.php und verwenden Sie die Klasse erstellt es eine neue test.db im Ordner "admin". Aber wenn ich es in der Datei "otherfile.php" benötige und die Klasse benutze, erstellt es eine separate test.db Datei in demselben Ordner wie "otherfile.php". Wie kann ich es erzwingen, eine Datei zu verwenden, während immer noch ein relativer Pfad zur db verwendet wird?

edit: Ich persönlich denke, das ist die beste funktionieren würde:

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

} 

Das funktioniert lokal mit meinem xampp Setup, aber nicht funktioniert leider auf einem Remote-Server.

edit: Endlich herausgefunden, siehe Antwort. sowieso

Danke für die Antworten :-)

+0

versuchen, einen vollständigen Pfad auf Ihrer DB-Klasse verwenden, wenn Sie die Datenbank verweisen, statt ./ – Gerep

+0

ja das funktionieren würde ich es wissen, ich habe nur gefragt, ob es möglich ist, während immer noch einen relativen Pfad mit – Piotr

+0

es nicht möglich, weil Sie von verschiedenen Orten auf die Klasse zugreifen und der relative Pfad nicht funktioniert. – Gerep

Antwort

0

Sie können einen Pfad zu Ihrer Verbindungs ​​Funktion übergeben

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


} 

Da Ihre Dateien an verschiedenen Orten der gleiche relative Pfad funktioniert nicht sind, wie Sie sind beobachten.

+0

Ich habe die Antwort in meine Frage bearbeitet, da ich mich nicht selbst beantworten kann. – Piotr

0

dachte es schließlich heraus, meine lokale PHP-Setup hat php> Version 5.3, die Version auf dem Remote-Server lag unter 5,3 so __DIR__ nicht verfügbar war, und ich hatte dirname(__FILE__) stattdessen zu verwenden, und es funktionierte schließlich wie beabsichtigt:

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

} 
Verwandte Themen