Так вот, нам рекомендуют переходить на mysqli расширение (есть и другие варианты, но я их не тестировал)
Что будет в данном уроке :
- Класс для взаимодействия с mysql через расширение mysql (версия устарела, но она может быть полезна)
- Класс для взаимодействия с mysql через расширение mysqli (новая версия, будет актуальна на >= php5)
boolean Connect() - соединение с БД
void Disconnect() - отключение от БД
resource Query($query) - простой запрос без проверки данных
resource QueryEx($query, $keys, $value) - запрос с шаблоном ($query - шаблон, $keys - массив ключей которые надо заменить элементами массива $value при этом массив $value будет проверяться на sqlinj (базовый пример) )
array ToArray($resource) - перевод результата запроса в array
int GetCount($resource) - количество полей, которое будет получено после запроса
array GetErrors() - функция для отладки получает массив ошибок, которые произошли во время работы класса
array GetRequests() - функция для отладки получает массив запросов, которые мы делали во время работы класса
string GetLastRequst() - функция для отладки получает последний запрос из метода GetRequests()
Все представленные методы актуальны будут для обоих вариаций класса (mysql, mysqli)
Шаг 1. Создадим конфигуратор
Вот его код :
Код: Выделить всё
<?phpdefine('MYSQL_USER', 'login');define('MYSQL_HOST', 'localhost');define('MYSQL_BASENAME', 'base name');define('MYSQL_PASS', 'password');?>
Шаг 2. Создадим основу для класса
Вот код основы шаблона :
Код: Выделить всё
<?phpinclude_once 'config.php';class MySQL{ var $connection; //ид подключение (NULL если ошибка или нет подключения) var $error_log = array(); //массив ошибок var $requests = array(); //массив запросов function __construct(){ $this->connection = NULL; // нет подключение $this->error_log = array(); $this->requests = array(); } public function Connect() { } public function Disconnect() { } public function Query($query) { } public function QueryEx($source_tpl, $args_a, $args_b){ } public function ToArray($result) { } public function GetCount($result) { } public function GetErrors() { } public function GetRequests() { } public function GetLastRequst() { }}?>
Реализация класса под расширение php mysqli :
Код: Выделить всё
<?phpinclude_once 'config.php';class MySQL{ var $connection; var $error_log = array(); var $requests = array(); function __construct(){ $this->connection = NULL; $this->error_log = array(); $this->requests = array(); } public function Connect() { $this->connection = mysqli_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PASS,MYSQL_BASENAME); if (!$this->connection) { array_push($this->error_log, mysqli_connect_error()); return false; } if (!mysqli_query($this->connection, "SET NAMES 'utf8'")){ array_push($this->error_log, $this->connection->error); return false; } return true; } public function Disconnect() { if ($this->connection){ $this->connection->close(); } return false; } public function Query($query) { array_push($this->requests, $query); $resp = $this->connection->query($query); if (!$resp){ array_push($this->error_log, $this->connection->error); return false; } return $resp; } public function QueryEx($source_tpl, $args_a, $args_b){ $online = array(); $keys = array(); for ($i = 0; $i < count($args_b); $i++){ $keys[$i] = $this->connection->real_escape_string($args_b[$i]); } $online = array_combine($args_a, $keys); $query = strtr($source_tpl, $online); array_push($this->requests, $query); $resp = $this->connection->query($query); if (!$resp){ array_push($this->error_log, $this->connection->error); return false; } return $resp; } public function ToArray($result) { $temp = $result->fetch_assoc(); if (!$temp){ array_push($this->error_log, $this->connection->error); return false; } return $temp; } public function GetCount($result) { $temp = mysqli_num_rows($result); if (!$temp){ array_push($this->error_log, $this->connection->error); return false; } return intval($temp); } public function GetErrors() { return $this->error_log; } public function GetRequests() { return $this->requests; } public function GetLastRequst() { return $this->requests[count($this->requests) - 1]; }}?>
Реализация класса под расширение php mysql :
Код: Выделить всё
<?phpinclude_once 'config.php'; class MySQL{ var $connection_id = -1; var $error_log = array(); var $requests = array(); public function Connect() //подключаемся к mysql { $this->connection_id = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS); //константы из config.class.php if (!$this->connection_id){ array_push($this->error_log, mysql_error()); return false; } if (!mysql_select_db(MYSQL_BASENAME)){ array_push($this->error_log, mysql_error()); return false; } if (!mysql_query("SET NAMES 'utf8'")){ array_push($this->error_log, mysql_error()); return false; } return true; } public function Disconnect() //отключаемся от mysql { if ($this->connection_id != -1){ if (!mysql_close($this->connection_id)){ array_push($this->error_log, mysql_error()); return false; } return true; } return false; } public function Query($query) { array_push($this->requests, $query); $resp = mysql_query($query); if (!$resp){ array_push($this->error_log, mysql_error()); return false; } return $resp; } public function QueryEx($source_tpl, $args_a, $args_b){ $online = array(); $keys = array(); for ($i = 0; $i < count($args_b); $i++){ $keys[$i] = mysql_real_escape_string($args_b[$i]); } $online = array_combine($args_a, $keys); $query = strtr($source_tpl, $online); array_push($this->requests, $query); $resp = mysql_query($query); if (!$resp){ array_push($this->error_log, mysql_error()); return false; } return $resp; } public function ToArray($result) //переводим результат запроса в массив { $temp = mysql_fetch_array($result); if (!$temp){ array_push($this->error_log, mysql_error()); return false; } return $temp; } public function GetCount($result) //получаем кол-во записей после запроса { $temp = mysql_num_rows($result); if (!$temp){ array_push($this->error_log, mysql_error()); return false; } return intval($temp); } public function GetErrors() //список ошибок для отладки { return $this->error_log; } public function GetRequests() //все запросы во время сессии { return $this->requests; } public function GetLastRequst() { return $this->requests[count($this->requests) - 1]; }}?>
Все ошибки и/или кривые моменты пишите в комментарии. Буду благодарен вам. Оба класса проверены на работоспособность.