В различных движках и фреймворках механизмы работы с базой данных уже автоматизированы. Вам лишь предстоит воспользоваться какими-либо функциями, API, для получения некоторых данных. Всё это удобно, безопасно, да и вообще быстро. Однако если вы решили сделать что-то своё, как говориться с нуля, такая инициатива тоже в почете, и может оказаться рациональной не в малой степени. Тем не менее, вы получите опыт, в этом случае вы в плюсе, ну да ладно, ближе к делу. Использование базы данных MySQL требует неких операций, это подключение к серверу баз данных, выбор базы, запрос, преобразование результата, к примеру, в массив и т.д.
В данной заметке мы рассмотрим простой сниппет, в виде класса, с несколькими методами, которым удобно воспользоваться при создании своих веб-приложений без использования готовых движков, и модифицировать их при надобности под себя. Данный класс частично автоматизирует процесс работы с MySQL, сокращая код в скриптах благодаря возможности повторного его использования.
Для начала работы с базой данных нам потребуются некоторые параметры, определяем их в константы:
// эту часть удобно вывести в отдельный конфигурационный файл // например config.php define('DB_HOST','localhost'); // хост define('DB_USER','dbUser'); // пользователь MySQL define('DB_PASS','qwerty1'); // пароль define('DB_NAME','myDataBase'); // имя базы define('DEBUG',true); // включение режима отладки
При разработке приложений, для параметров сайта удобно завести отдельный конфигурационный файл. Удобство будет заметно, когда количество файлов будет значительным, и при надобности поменять, к примеру, пароль от базы данных, вам не придется искать среди всей кучи скриптов, где же он был там прописан.
Кстати, так же рекомендую прочитать заметку о концепции «единой точки входа», если вы занимаетесь разработкой своего движка, информация может оказаться полезной вдвойне.
Сам класс содержит два простых метода, connect() и query(). Первый метод служит для подключения к серверу базы данных на основе указанных выше параметров, второй же метод служит непосредственно для выполнения запросов к базе. Обратите внимание на константу DEBUG, при значении true включает вывод сообщений об ошибках, механизмы такого рода позволяют в значительной степени облегчить отладку кода.
/* класс для работы MySQL */ class mySQL { public $DBConnect = false; function __construct(){ $this->connect(); } // подключение к базе private function connect(){ if (@$db = mysql_connect(DB_HOST, DB_USER, DB_PASS)){ if (mysql_select_db (DB_NAME,$db)){ mysql_query("SET NAMES 'UTF8'"); $this->DBConnect = $db; return true; } else { if(DEBUG) echo 'Не удалось открыть базу данных MySQL: '.mysql_error(); return false; } } else { if(DEBUG) echo 'Не удалось соединиться с базой данных MySQL: '.mysql_error(); return false; } } // выполнение SQL запроса // $resType - возвращаемый результат, варианты: array/resource function query($sql,$resType='array'){ $res = mysql_query($sql,$this->DBConnect); if ($resType == 'resource'){ return $res; # ресурс } else { if ($res){ if (mysql_num_rows($res) > 0){ while($arr = mysql_fetch_assoc($res)){ $arRes[] = $arr; } return $arRes; # массив } else { if(DEBUG) echo 'Запрос не вернул результат: '.$sql; return false; } } else { if(DEBUG) echo 'Ошибка выполнения запроса: '.$sql; return false; } } } }
Теперь посмотрим, как это дело применяется. Подключаем файл с классом, создаем объект – экземпляр класса:
$myObj = new mySQL();
При создании объекта запускается конструктор класса, который в свою очередь обращается к методу connect(). Данный метод выполняет подключение к серверу базы данных согласно заданным параметрам.
Теперь собственно выполнение запроса:
$arUsers = $myObj->query('SELECT * FROM users', 'array');
В качестве первого параметра метод query() получает строку SQL-запроса, второй параметр — может принимать значения array (значение по ум.) или resource, означает в каком виде метод должен вернуть результат, так же можно дополнить своими параметрами.
Как вы уже наверное заметили, строка запроса к базе в данном примере не проверяется вовсе, это естественно не безопасно, и нужно это трезво понимать. Есть и плюсы — все запросы к базе будут исходить из одной точки, а это значит можно более гибко работать с данными, парсить, логировать, и т.д.
P.S. Ну и в завершении поста: при неосторожном использовании данного кода, можно серьезно накосячить в коде, в общем, на ваш страх и риск. Если есть что дополнить, комментарии к вашим услугам.
Ну mysql_connect() устарел уже. Нужно использовать MySQLi, а лучше PDO