我試圖從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不需要 '主機='
當你使用正斜槓而不是'DIRECTORY_SEPERATOR'提供的Win32專用反斜槓時會發生什麼? – Charles 2011-05-11 03:28:34
仍然是相同的錯誤 – PalmTree 2011-05-11 03:35:20
把創建與db連接的php文件放在與db相同的文件夾中,然後只需要帶有'require_once('abspath/connect.php')的php文件',其中abspath是連接的絕對路徑。 PHP的? – 2011-05-11 03:40:55