Здравствуйте! Столкнулся с такой странной проблемой. Не получается импортировать базу данных. Само интересно, что phpAdmin Openserver указывает, что всё удачно прошло, но в базе данных таблиц нет... Прошу помочь разобраться! Что может быть не так?
Похоже, что это какой-то баг, частный случай. Т.к. за несколько лет работы с OS, я не встречал подобного ни у себя, ни в обсуждениях. Попробуйте импорт через консоль. Хотя, я бы лучше переустановил OS, т.к. проблема может возникать в дальнейшей работе. Кстати, какую версию используете?
Всё в порядке создалось... Не заметил. Но возникла другая ошибка... Привожу файлы подключения: Файл Db.php PHP: class Db { public static function getConnection() { $paramsPath = ROOT . '/config/db_params.php'; $params = include($paramsPath); $dsn = "mysql:host={$params['host']};dbname={$params['dbname']}"; $db = new PDO($dsn, $params['user'], $params['password']); $db->exec("set names utf8"); return $db; } } Файл db_params.php PHP: return array( 'host' => 'localhost', 'dbname' => 'phpshop', 'user' => 'root', 'password' => '', ); Файл Product.php(где выходит ошибка. Здесь на 21 строке) PHP: class Product { const SHOW_BY_DEFAULT = 10; /** * Returns an array of products */ public static function getLatestProducts($count = self::SHOW_BY_DEFAULT) { $count = intval($count); $db = Db::getConnection(); $productsList = array(); $result = $db->query('SELECT id, name, price, image, is_new FROM product ' . 'WHERE status = "1"' . 'ORDER BY id DESC ' . 'LIMIT ' . $count); $i = 0; while ($row = $result->fetch()) { $productsList[$i]['id'] = $row['id']; $productsList[$i]['name'] = $row['name']; $productsList[$i]['image'] = $row['image']; $productsList[$i]['price'] = $row['price']; $productsList[$i]['is_new'] = $row['is_new']; $i++; } return $productsList; } Помогите разобраться
@Алексей87К, где-то я такой код уже видел... стиль, зачем-то конкатенация строки запроса и т.д. )) Если метод query() вернул false, то это значит, что запрос выполнить не удалось. Включите режим PDO::ERRMODE_EXCEPTION и смотрите ошибки PHP: <?php try { $result = $db->query("SELECT `id`, `name`, `price`, `image`, `is_new` FROM `product` WHERE `status` = 1 ORDER BY `id` DESC LIMIT " . (int)$count); } catch (\PDOException $e) { echo $e->getMessage(); }
Пока не за что. Кстати, а зачем вам цикл while? Это похоже на переливание из пустого в порожнее. Даже, если принципиально нужен массив, то есть метод fetchAll()
зачем вообще класс ? чтобы содержать одну статическую функцию для всего лишь запроса... PHP: <?php # php version 7 $res = Db::getConnection() -> query( ... (int)( $count ?: 10 ) ) -> fetchAll( \PDO::FETCH_ASSOC ); все .. --- Добавлено --- и еще... pdo медленный... подключал mysqli, выполнено было 0.0014... pdo 0.0030
на самом деле он уступает не более чем на несколько процентов. никак не в два раза. зато имеет свои плюсы. так что не принципиально. можно считать что они равнозначны. просто дело вкуса.
поподробнее, кроме как работа с различными бд --- Добавлено --- свой фреймворк с переключателем расширений БД юзал. Один запрос ничего не скажет. А когда целый комплект обновлений, запросов. то разница на лицо.
насколько помню, mysqli не умел именованные параметры, что очень удобно. ну и 12 драйверов, плюс значительный, ибо мне приходилось делать проекты на sqlite и на postgres, и из oracle вытягивать данные. и PDO сводит весь гемор работы с разными БД к минимуму, ибо юзаешь одну обертку и не паришься. зато mysqli поддерживает все фишки mysql сервера, даже очень экзотические , типа неблокирующих асинхронных запросов, множественные запросы и полностью функционал 5.1 сервера. PDO тут отстает, насколько помню.
@runcore, я ведь же понятно написал.. --- Добавлено --- ты можешь объяснить тот нюанс , где PDO медленнее работает, как ни крути с настройками ? --- Добавлено --- ставлю 6 запросов, update select... подключенная спецом обвертка ( Lerma ) для работы со множественными производителями бд.