Доброго дня суток! Я недавно в разработке на PHP, занимаюсь небольшим проектом и на процессе разработке столкнулся с проблемой. Немного о проекте - Это база данных возможностей и потребностей группы предприятий одной отрасли. У каждого предприятия есть личный кабинет, там он создает (редактирует, удаляет) карточки со своими возможностями или потребностями. Так формируется база возможностей(потребностей) всех предприятий, после чего они могут осуществлять поиск по базе (в своем же личном кабинете) и находить себе партнеров. Каждое действие пользователя создает запрос к БД (поиск по различным критериям, добавление(изменение, удаление) данных карточек или личных данных (адрес, телефон, имя и т.д.) Теперь о проблеме - постоянно блокируется доступ к базе данных хостинга. Сначала не понимал в чем дело, приходилось ждать по пол часа пока снова начинало пускать (думал проблемы на хостинге, пока не понял что это систематически). В ходе мучений и разборов полета с хостингом выяснилось, что это "has exceeded the 'max_connections_per_hour' resource (current value: 50)". Хостинг отказывается изменять это значение и я не знаю в каком направлении мне двигаться дальше. Либо искать другой хостинг, то ли я просто не правильно пишу свой код и надо что-то менять. Использую PDO как метод подключения к БД, на каждое действие своя модель. Пример кода в скриншоте. Подскажите пожалуйста как решить проблему. Заранее спасибо!
Скриншоты кода - зло. Судя по всему вы постоянно открываете новое соединение для каждого нового запроса, вместо того чтобы открыть одно и использовать его во всех запросах. По поводу хостинга - если проект зрелый и восстребованный, пора бы перейти на vds. Там можно настроить как хотите.. но ваша ошибка не в хостинге в данном случае
Прошу прощение за скриншоты, думал удобнее читать будет. Да, все верно я начиная с загрузки личного кабинета и далеее при каждом действии делаю include_once класса-подключения к БД, запускаю в нем new PDO, передаю sql запрос, получаю данные и отправляю контроллеру. А как в PDO сделать постоянное подключение. И безопасно ли так делать? Что касательно выделенки, как проект будет готов перейдем на нее.
Include делать только в начале проекта, получать дескриптор и все... Везде использовать данный дескриптор... Как - зависит от того какой код, ООП, процедурный подход, глобальные переменные...
Под «постоянным подключением» обычно понимают другое. Тут просто одно, общее и т.п. подключение, что фактически норма за редкими исключениями. Переделывайте при помощи синглтона. Прослойку Crud можете оставить для упрощения переделки, поддержки множественных подключений и т.п.
ООП использую. Не знаю мужики, я наверное тупой. Вроде бы понимаю, что надо сделать, но ничего не работает. Начал переписывать с момента авторизации пользователя на сайте. Вот что накатал: Класс подключения к бд: PHP: <?php class Crud { private $servername; private $username; private $password; private $dbname; private static $conn; public function __construct() { $this->servername = "localhost"; $this->username = "vfacttty_spender"; $this->password = "*******"; $this->dbname = "vfacttty_spender"; } public static function connect(){ if(!empty(self::$conn)){ return self::$conn; } try{ $dbh = new PDO("mysql:host=$this->servername;dbname=$this->dbname", $this->username, $this->password, [PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8", PDO::ATTR_PERSISTENT => true]); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); self::$conn = $dbh; return $dbh; } catch(PDOException $e){ print "Error! : " . $e->getMessage() . "<br/>"; } } } Модель авторизации пользователя: PHP: <?php class ModelAutorization { private $crud; function __construct() { include ROOT . "/components/Crud.php"; $this->crud = Crud::connect(); } public function actionLogin($email, $pass){ $sqlName = "SELECT * FROM `ak_users` WHERE `mail`= ?"; $preQu = $this->crud->prepare($sqlName); $preQu->execute([$email]); $preQu->setFetchMode(PDO::FETCH_ASSOC); $logArr = $preQu->fetchAll(); if(count($logArr) > 0){ if(password_verify ($pass , $logArr[0]['hash_pass'] )){ $_SESSION['user'] = [ 'mail' => $logArr[0]['mail'], 'company' => $logArr[0]['company'], 'name' => $logArr[0]['name'], 'role' => $logArr[0]['role'], 'status' => $logArr[0]['status'], 'adress' => $logArr[0]['adress'], 'telephone' => $logArr[0]['telephone'], 'photo' => $logArr[0]['photo'] ]; return [true, $_SESSION['user']]; } } return false; } } Не хочет подключаться....я хоть в правильную сторону двигаюсь?