За последние 24 часа нас посетили 23911 программистов и 1641 робот. Сейчас ищут 860 программистов ...

Создание таблицы в базе данных

Тема в разделе "PHP для новичков", создана пользователем Рихард, 8 фев 2018.

  1. Рихард

    Рихард Новичок

    С нами с:
    13 янв 2018
    Сообщения:
    89
    Симпатии:
    6
    В общем такой вопрос простой, я чайник,так что ......)
    Создаю таблицу в базе данных , а она не создается и выдается ошибка.
    Браузер выдает вот это
    Could not greate table: SQLSTATE[HY000] [14] unable to open database file.
    Код (Text):
    1. try {
    2.     $db=new PDO('sqlite:/tmp/restaurant.db');
    3.     $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    4.     $q=$db->exec("GREATE TABLE dishes(
    5.                     dish_id INTEGER PRIMARY KEY,
    6.                     dish_name VARCHAR(255),
    7.                     price DECIMAL(4,2),
    8.                     is_spicy INT
    9.                     )");
    10. } catch (PDOException $e){
    11.     print "Could not greate table: ".$e->getMessage();
    12. }

    До этого выдавало такую ошибку
    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):
    1. $db = new PDO('mysql:host=db.example.com;dbname=restaurant',
    2.     'penguin','top^hat');
    на такой код, тут понятно что хост неправильно указан и таблицы нету,
    а в верхнем то примере где ошибка

    или их не в браузере проверять))
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    unable to open database file - невозможно открыть файл базы данных. Видимо разрешения на доступ в эту папку у вас нету.
    И ещё, создать - это CREATE по-английски, GREATE - это вы новое слово изобрели.
     
    Рихард нравится это.
  3. Рихард

    Рихард Новичок

    С нами с:
    13 янв 2018
    Сообщения:
    89
    Симпатии:
    6
    Стоит openserver это получается папку domains надо изменить доступ, можно поподробнее, в какую папку и в какой папке она создается, на сервере
     
  4. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    А ворнинг то какой? Там ещё сообщение должно быть.

    нэймспейса, случайно, в начале файла нету?
     
  5. Рихард

    Рихард Новичок

    С нами с:
    13 янв 2018
    Сообщения:
    89
    Симпатии:
    6
    с учебника это, ничего больше нету.

    А первый код доступ к какой папке требует?
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Как всё печально...
    В этой строчке попытка открыть файл по маршруту /tmp/restaurant.db. Маршрут никсовый, у вас Windows, для начала попробуйте подставить свой маршрут, существующий. Вообще, такие вещи обычно создают в папке сайта, получая её путь через __DIR__
     
  7. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    винда ещё десять лет назад резолвила корень "никсовы" в корень логического диска, на котором запущен веб-сервер. Хочешь сказать что разучилась?
     
  8. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Ну может и не разучилась, ок, спорить не буду. Я просто ни разу так не пробовал :) Главный факт, что каталога /tmp явно нету.
     
  9. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    @mkramer а у тебя есть под виндой сервер? Что realpath скажет на корень? Просто у меня только линуксы в империи.
     
  10. Рихард

    Рихард Новичок

    С нами с:
    13 янв 2018
    Сообщения:
    89
    Симпатии:
    6
    буду читать дальше, а то непонятно
    вроде создается объект для обращения к базе $db=new PDO('sqlite:/tmp/restaurant.db');
    и в нем конструктор ('sqlite:/tmp/restaurant.db')
    для этого объекта с параметрами,
    далее методом exec создается в указанной базе таблица
    1. $q=$db->exec("GREATE TABLE dishes(
    2. dish_id INTEGER PRIMARY KEY,
    3. dish_name VARCHAR(255),
    4. price DECIMAL(4,2),
    5. is_spicy INT
    6. )");
    Тут получается база restaurent не создается как бы.
     
  11. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    /tmp/restaurant.db - это по твоему что такое?
    --- Добавлено ---
     
  12. Рихард

    Рихард Новичок

    С нами с:
    13 янв 2018
    Сообщения:
    89
    Симпатии:
    6
    Это конструктор в классе , который дает уже готовый параметр при производстве объекта, то есть в объекте уже создается эта база по параметру класса.

    Greate на Create
    я уже поменял у себя все равно выдает что нет доступа к папке
    Could not greate table: SQLSTATE[HY000] [14] unable to open database file.


    Я как понял этот параметр конструктора базу не создает а к ней просто прокладывает путь?
    /tmp/restaurant.db

    И для создания базы надо создать файл с расширением db в папке сайта index.php и в конструктору объекта показать этот путь ???? так верно
     
  13. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    На счёт файла не уверен (как-то с SQLite не сталкивался), но папка должна быть, и должна быть доступна веб-серверу на запись
     
  14. Рихард

    Рихард Новичок

    С нами с:
    13 янв 2018
    Сообщения:
    89
    Симпатии:
    6
    а как обстоят дела с mysql?
    --- Добавлено ---
    Опытные разработчики подскажите где копать?
    изучу сам вопрос, направление дайте)
     
  15. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.857
    Симпатии:
    656
    @Ganzal, корень логического диска, как и положено.

    @Рихард, для MySQL нужно указать логин и пароль, в остальном вроде более-менее нормально.
     
  16. Рихард

    Рихард Новичок

    С нами с:
    13 янв 2018
    Сообщения:
    89
    Симпатии:
    6
    корень логического диска относительно папки откуда запускаю?
     
  17. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.857
    Симпатии:
    656
    Диск берется от текущего (рабочего) каталога. Если речь идет о запуске скрипта Web-сервером, то можно сказать, что берется диск, с кот. запускается скрипт, если конечно вы в самом скрипте не сменили диск рабочего каталога.
    --- Добавлено ---
    Вообще делайте так, как вам выше написали: не определяйте абс. пути явно, а сформируйте для них префикс на основе тек. каталога или корневого каталога сайта.