В общем такой вопрос простой, я чайник,так что ......) Создаю таблицу в базе данных , а она не создается и выдается ошибка. Браузер выдает вот это Could not greate table: SQLSTATE[HY000] [14] unable to open database file. Код (Text): try { $db=new PDO('sqlite:/tmp/restaurant.db'); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $q=$db->exec("GREATE TABLE dishes( dish_id INTEGER PRIMARY KEY, dish_name VARCHAR(255), price DECIMAL(4,2), is_spicy INT )"); } catch (PDOException $e){ print "Could not greate table: ".$e->getMessage(); } До этого выдавало такую ошибку Warning: PDO::__construct(): in C:\OSPanel\domains\adventure\index.php on line 20 Fatal error: in C:\OSPanel\domains\adventure\index.php on line 20 Код (Text): $db = new PDO('mysql:host=db.example.com;dbname=restaurant', 'penguin','top^hat'); на такой код, тут понятно что хост неправильно указан и таблицы нету, а в верхнем то примере где ошибка или их не в браузере проверять))
unable to open database file - невозможно открыть файл базы данных. Видимо разрешения на доступ в эту папку у вас нету. И ещё, создать - это CREATE по-английски, GREATE - это вы новое слово изобрели.
Стоит openserver это получается папку domains надо изменить доступ, можно поподробнее, в какую папку и в какой папке она создается, на сервере
Как всё печально... В этой строчке попытка открыть файл по маршруту /tmp/restaurant.db. Маршрут никсовый, у вас Windows, для начала попробуйте подставить свой маршрут, существующий. Вообще, такие вещи обычно создают в папке сайта, получая её путь через __DIR__
винда ещё десять лет назад резолвила корень "никсовы" в корень логического диска, на котором запущен веб-сервер. Хочешь сказать что разучилась?
Ну может и не разучилась, ок, спорить не буду. Я просто ни разу так не пробовал Главный факт, что каталога /tmp явно нету.
@mkramer а у тебя есть под виндой сервер? Что realpath скажет на корень? Просто у меня только линуксы в империи.
буду читать дальше, а то непонятно вроде создается объект для обращения к базе $db=new PDO('sqlite:/tmp/restaurant.db'); и в нем конструктор ('sqlite:/tmp/restaurant.db') для этого объекта с параметрами, далее методом exec создается в указанной базе таблица $q=$db->exec("GREATE TABLE dishes( dish_id INTEGER PRIMARY KEY, dish_name VARCHAR(255), price DECIMAL(4,2), is_spicy INT )"); Тут получается база restaurent не создается как бы.
Это конструктор в классе , который дает уже готовый параметр при производстве объекта, то есть в объекте уже создается эта база по параметру класса. Greate на Create я уже поменял у себя все равно выдает что нет доступа к папке Could not greate table: SQLSTATE[HY000] [14] unable to open database file. Я как понял этот параметр конструктора базу не создает а к ней просто прокладывает путь? /tmp/restaurant.db И для создания базы надо создать файл с расширением db в папке сайта index.php и в конструктору объекта показать этот путь ???? так верно
На счёт файла не уверен (как-то с SQLite не сталкивался), но папка должна быть, и должна быть доступна веб-серверу на запись
а как обстоят дела с mysql? --- Добавлено --- Опытные разработчики подскажите где копать? изучу сам вопрос, направление дайте)
@Ganzal, корень логического диска, как и положено. @Рихард, для MySQL нужно указать логин и пароль, в остальном вроде более-менее нормально.
Диск берется от текущего (рабочего) каталога. Если речь идет о запуске скрипта Web-сервером, то можно сказать, что берется диск, с кот. запускается скрипт, если конечно вы в самом скрипте не сменили диск рабочего каталога. --- Добавлено --- Вообще делайте так, как вам выше написали: не определяйте абс. пути явно, а сформируйте для них префикс на основе тек. каталога или корневого каталога сайта.