За последние 24 часа нас посетили 22804 программиста и 1231 робот. Сейчас ищут 803 программиста ...

Не импортируется база данных

Тема в разделе "PHP и базы данных", создана пользователем Алексей87К, 6 дек 2017.

  1. Алексей87К

    Алексей87К Новичок

    С нами с:
    5 янв 2017
    Сообщения:
    157
    Симпатии:
    4
    Здравствуйте! Столкнулся с такой странной проблемой. Не получается импортировать базу данных. Само интересно, что phpAdmin Openserver указывает, что всё удачно прошло, но в базе данных таблиц нет... Прошу помочь разобраться! Что может быть не так?
     
  2. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Похоже, что это какой-то баг, частный случай. Т.к. за несколько лет работы с OS, я не встречал подобного ни у себя, ни в обсуждениях. Попробуйте импорт через консоль. Хотя, я бы лучше переустановил OS, т.к. проблема может возникать в дальнейшей работе. Кстати, какую версию используете?
     
  3. Алексей87К

    Алексей87К Новичок

    С нами с:
    5 янв 2017
    Сообщения:
    157
    Симпатии:
    4
    Всё в порядке создалось... Не заметил. Но возникла другая ошибка...
    Привожу файлы подключения:

    Файл Db.php
    PHP:
    1. class Db
    2. {
    3.  
    4.     public static function getConnection()
    5.     {
    6.         $paramsPath = ROOT . '/config/db_params.php';
    7.         $params = include($paramsPath);
    8.      
    9.  
    10.         $dsn = "mysql:host={$params['host']};dbname={$params['dbname']}";
    11.         $db = new PDO($dsn, $params['user'], $params['password']);
    12.         $db->exec("set names utf8");
    13.      
    14.         return $db;
    15.     }
    16.  
    17. }
    Файл db_params.php
    PHP:
    1. return array(
    2.     'host' => 'localhost',
    3.     'dbname' => 'phpshop',
    4.     'user' => 'root',
    5.     'password' => '',
    6. );
    Файл Product.php(где выходит ошибка. Здесь на 21 строке)
    PHP:
    1. class Product
    2. {
    3.  
    4.     const SHOW_BY_DEFAULT = 10;
    5.  
    6.     /**
    7.      * Returns an array of products
    8.      */
    9.     public static function getLatestProducts($count = self::SHOW_BY_DEFAULT)
    10.     {
    11.         $count = intval($count);
    12.         $db = Db::getConnection();
    13.         $productsList = array();
    14.  
    15.         $result = $db->query('SELECT id, name, price, image, is_new FROM product '
    16.                 . 'WHERE status = "1"'
    17.                 . 'ORDER BY id DESC '              
    18.                 . 'LIMIT ' . $count);
    19.  
    20.         $i = 0;
    21.         while ($row = $result->fetch()) {
    22.             $productsList[$i]['id'] = $row['id'];
    23.             $productsList[$i]['name'] = $row['name'];
    24.             $productsList[$i]['image'] = $row['image'];
    25.             $productsList[$i]['price'] = $row['price'];
    26.             $productsList[$i]['is_new'] = $row['is_new'];
    27.             $i++;
    28.         }
    29.  
    30.         return $productsList;
    31.     }
    Помогите разобраться
     
  4. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    @Алексей87К, где-то я такой код уже видел... стиль, зачем-то конкатенация строки запроса и т.д. ))
    Если метод query() вернул false, то это значит, что запрос выполнить не удалось. Включите режим PDO::ERRMODE_EXCEPTION и смотрите ошибки
    PHP:
    1. <?php
    2. try {
    3.    $result = $db->query("SELECT
    4.      `id`, `name`, `price`, `image`, `is_new`
    5.    FROM
    6.      `product`
    7.    WHERE
    8.      `status` = 1
    9.    ORDER BY `id` DESC
    10.    LIMIT " . (int)$count);
    11. } catch (\PDOException $e) {
    12.     echo $e->getMessage();
    13. }
     
  5. Алексей87К

    Алексей87К Новичок

    С нами с:
    5 янв 2017
    Сообщения:
    157
    Симпатии:
    4
    Спасибо! Завтра уже проверю и сообщу...
     
  6. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Пока не за что. Кстати, а зачем вам цикл while? Это похоже на переливание из пустого в порожнее. Даже, если принципиально нужен массив, то есть метод fetchAll()
     
    MouseZver нравится это.
  7. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.752
    Симпатии:
    1.322
    Адрес:
    Лень
    зачем вообще класс ? чтобы содержать одну статическую функцию для всего лишь запроса...

    PHP:
    1. <?php # php version 7
    2.  
    3. $res = Db::getConnection() -> query( ... (int)( $count ?: 10 ) ) -> fetchAll( \PDO::FETCH_ASSOC );
    все ..
    --- Добавлено ---
    и еще... pdo медленный... подключал mysqli,
    выполнено было 0.0014...
    pdo 0.0030
     
  8. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    на самом деле он уступает не более чем на несколько процентов. никак не в два раза.
    зато имеет свои плюсы. так что не принципиально. можно считать что они равнозначны. просто дело вкуса.
     
  9. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Там скорость еще зависит от того, включен режим эмуляции или нет.
     
  10. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.752
    Симпатии:
    1.322
    Адрес:
    Лень
    поподробнее, кроме как работа с различными бд
    --- Добавлено ---
    свой фреймворк с переключателем расширений БД юзал. Один запрос ничего не скажет. А когда целый комплект обновлений, запросов. то разница на лицо.
     
  11. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    насколько помню, mysqli не умел именованные параметры, что очень удобно.
    ну и 12 драйверов, плюс значительный, ибо мне приходилось делать проекты на sqlite и на postgres, и из oracle вытягивать данные. и PDO сводит весь гемор работы с разными БД к минимуму, ибо юзаешь одну обертку и не паришься.

    зато mysqli поддерживает все фишки mysql сервера, даже очень экзотические , типа неблокирующих асинхронных запросов, множественные запросы и полностью функционал 5.1 сервера. PDO тут отстает, насколько помню.
     
  12. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.752
    Симпатии:
    1.322
    Адрес:
    Лень
    @runcore, я ведь же понятно написал..
    --- Добавлено ---
    ты можешь объяснить тот нюанс , где PDO медленнее работает, как ни крути с настройками ?
    --- Добавлено ---
    ставлю 6 запросов, update select... подключенная спецом обвертка ( Lerma ) для работы со множественными производителями бд.
     
  13. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    нет немогу. твой код. ищи ошибку.
     
  14. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.752
    Симпатии:
    1.322
    Адрес:
    Лень
    неверно
    --- Добавлено ---
    @runcore тогда в чем твой смысл влезания в диалог ?