Ошибка подключения к PDO SQLite3, когда база данных находится в другой папке - PullRequest
0 голосов
/ 11 мая 2011

Я пытаюсь подключиться к базе данных sqlite3 из php, но я попадаю в кирпичную стену, когда хочу разместить свою базу данных где-нибудь в удобном месте вне доступного веб-пространства. Когда db-файл находится в той же папке, что и мой php-скрипт, он работает нормально, но когда я помещаю его в другое место, - молчание завершается ошибкой.

Я написал простую программу проверки, чтобы было проще понять, что я имею в виду

<?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: \ Web \ data.db и C: \ Web \ some_inner_folder \ data.db имеют одинаковое содержимое (копирование и вставка файла)

PHP версии 5.3.6, Windows 7 x64

драйверы PDO mysql, sqlite, sqlite2

Библиотека SQLite 3.7.4

Я не понимаю, почему это не работает.

Проблема решена

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

должно читаться так:

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

Оказывается, pdo_sqlite не нуждается в 'host ='

Ответы [ 2 ]

0 голосов
/ 12 мая 2011

У вас есть проблема с разрешениями в другой папке. Он должен быть способен создавать и записывать файл (т. Е. Вы должны иметь возможность записи в каталог и в файл).

0 голосов
/ 11 мая 2011

Когда мы кодировали слой базы данных для Drupal 7, мы обнаружили, что PDO имеет много режимов ошибок, и единственное исключение стоит того.$driver_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; это сделает тихий отказ намного более шумным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...