В различных движках и фреймворках механизмы работы с базой данных уже автоматизированы. Вам лишь предстоит воспользоваться какими-либо функциями, 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