2011-05-11 30 views
0

我試圖從php連接到sqlite3數據庫,但是當我想將我的數據庫放置在方便和Web訪問空間之外的地方時,我正在打磚牆。當db文件與我的php腳本在同一個文件夾中時,它運行正常,但是當我將它放在其他地方時 - 無聲失敗。當數據庫位於不同的文件夾時,PDO SQLite3連接失敗

我已經寫了一個簡單的檢查,因此會更容易明白我的意思

<?php 
$files = array(
    'data.db', 
    getcwd() . DIRECTORY_SEPARATOR . 'data.db', 
    'some_inner_folder' . DIRECTORY_SEPARATOR . 'data.db', 
    getcwd() . DIRECTORY_SEPARATOR . 'some_inner_folder' . DIRECTORY_SEPARATOR . 'data.db' 
); 

foreach($files as $file) { 
    if(file_exists($file)) 
     echo $file, ' found<br/>'; 
    else 
     echo $file, ' not found!<br/>'; 
    try { 
     $db = new PDO('sqlite:host=' . $file); 
     if($db) 
      echo 'connection to ', $file, ' made succesfully<br/>'; 
    } catch (PDOException $error) { 
     echo 'error connecting to ', $file, ' error message: ', $error->getMessage(), '<br/>'; 
    } 
    $db = null; 
} 

輸出竟然是:

data.db found 
connection to data.db made succesfully 
C:\Web\data.db found 
error connecting to C:\Web\data.db error message: SQLSTATE[HY000] [14] unable to open database file 
some_inner_folder\data.db found 
error connecting to some_inner_folder\data.db error message: SQLSTATE[HY000] [14] unable to open database file 
C:\Web\some_inner_folder\data.db found 
error connecting to C:\Web\some_inner_folder\data.db error message: SQLSTATE[HY000] [14] unable to open database file 

C:\網絡\ data.db和C:\網絡\ some_inner_folder \ data.db具有相同的內容(文件複製粘貼&)

PHP版本5.3.6,Windows 7的64位

PDO驅動程序的MySQL,SQLite的,sqlite2

SQLite庫3.7.4

我沒有真正看到它爲什麼不工作。

問題解決

$db = new PDO('sqlite:host=' . $file); 

應該這樣寫:

$db = new PDO('sqlite:' . $file); 

原來PDO_SQLITE不需要 '主機='

+0

當你使用正斜槓而不是'DIRECTORY_SEPERATOR'提供的Win32專用反斜槓時會發生什麼? – Charles 2011-05-11 03:28:34

+0

仍然是相同的錯誤 – PalmTree 2011-05-11 03:35:20

+0

把創建與db連接的php文件放在與db相同的文件夾中,然後只需要帶有'require_once('abspath/connect.php')的php文件',其中abspath是連接的絕對路徑。 PHP的? – 2011-05-11 03:40:55

回答

0

當我們爲Drupal 7編碼數據庫層我們發現PDO有許多錯誤模式,只有例外是值得的。 $driver_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;這會讓沉默失敗更加嘈雜。

0

您是否對其他文件夾有權限問題。它必須能夠創建和寫入文件(即,您必須能夠寫入目錄和文件)。