SQL class - класс упрощающий работу с SQL
Конечно существует много подобных классов, но многие из них перегружены лишними функциями, и вовсе не упрощают работу, некоторые наоборот пытаясь упростить объединяют “Выполнение запроса” и “получение результирующих данных” в одну операцию что в некоторых случаях доставляет проблеммы.
В моем классе реализовано:
Удобное получение результатов
Удобный интерфейс отслеживания и обработки ошибок
Удобный интерфеус отслеживания запросов (для отладки)
Система placeholder-ов повышает безопасность приложения
метды класса SQL
void setErrorHandler(string $function) void setQueryHandler(string $function) bool Connect([ string $server [, string $username [, string $password [, string $database]]]] ) bool SelectDB(string $database) void SetPrefix(string $replace_to [, string $replace_from = '_#'] ) SQLres Query(string $query [, mixed $args...] ) int InsertID(void) int AffectedRows(void) bool Close(void) string SmartEscapeString(string $str)
метды класса SQLres
array Fetch([int $result_type = MYSQL_ASSOC]) int NumRows(void) int NumFields(void) bool DataSeek(int $row_number) bool FreeResult(void) string Element(string $key)
void setErrorHandler(string $function)
Задает имя функции, обработчика ошибок. При возникновении ошибки будет вызываться функция $function и ей передаваться 3и аргумента:
1 - из за чего возникла ошибка
2 - какая возникла ошибка
3 - имя_файл:строка где произошла ошибка
void setQueryHandler(string $function)
задает имя функции для обработки запросов. При каждом новом SQL запросе будет вызываться функция $function и ей передаваться 4и аргумента:
1 - sql запрос
2 - успешность его выполнения (bool)
3 - врем выполнения запроса
4 - имя_файл:строка откуда был запрос
Данная функция полезна при отладки приложения.
function log_mysql_querys($q, $r, $t, $p) { GLOBAL $DB if($r) echo '<fieldset><strong>QUERY</strong>: '.$q.'<strong>AFFECTED</strong>: '.$DB->AffectedRows().' <strong>TIME</strong>: '.$t.'<strong>LINE</strong>: '.$p.'</fieldset>'; } function log_mysql_errors($q, $e, $p) { echo '<fieldset style="border: 3px solid red"><strong>QUERY</strong>: '.$q.'<strong>ERROR</strong>: '.$e.'<strong>LINE</strong>: '.$p.'</fieldset>'; } $DB = new SQL; $DB->setErrorHandler('log_mysql_errors'); $DB->setQueryHandler('log_mysql_querys');
bool Connect([ string $server [, string $username [, string $password [, string $database ]]]] )
соединение с сервером, тут думаю все понятно…
if(!$DB->Connect('localhost', 'root', '123')) exit;
bool SelectDB(string $database)
выбираем базу данных
if(!$DB->SelectDB('base')) exit;
void SetPrefix(string $replace_to [, string $replace_from = '_#'])
Устанавливаем префикс. Во всех запросах текст $replace_from будет заменяться на текст $replace_to
$DB->SetPrefix('asd_', 'pref_'); //будет заменять pref_ на asd_ $DB->SetPrefix('asd_'); //будет заменять #_ на asd_
SQLres Query(string $query [, mixed $args... ] )
Выполняет SQL запрос.
$query - сам SQL запрос, все поседующие аргументы для placeholder-ов.
Варианты placeholder-ов:
%d подставляет (int)
%s подставляет строку обрамленную в ковычки, есле необходимо эканирует спец символы
%a подставляет массив
%% подставляет %
$id = 10; $DB->Query('SELECT * FROM #_users WHERE id = %d LIMIT 1', $id) //Выполнит: SELECT * FROM asd_users WHERE id = 10 LIMIT 1 $id = 'asd34sd'; $DB->Query('SELECT * FROM #_users WHERE id = %d LIMIT 1', $id) //Выполнит: SELECT * FROM asd_users WHERE id = 34 LIMIT 1 $id = 'sometext'; $DB->Query('SELECT * FROM #_users WHERE id = %d LIMIT 1', $id) //Выполнит: SELECT * FROM asd_users WHERE id = 0 LIMIT 1 $text = 'somename'; $DB->Query('SELECT * FROM #_users WHERE name = %s LIMIT 1', $text) //Выполнит: SELECT * FROM asd_users WHERE name = 'somename' LIMIT 1 $a = array(1, 2, 5, 8); $DB->Query('SELECT * FROM #_users WHERE id IN(%a)', $a) //Выполнит: SELECT * FROM asd_users WHERE id IN(1, 2, 5, 8) $a = array('id' => 10, 'name' => 'some..'); $DB->Query('UPDATE #_users SET %a', $a) //Выполнит: UPDATE asd_users SET `id` = 10, `name` = 'some..'
int InsertID(void)
Возвращает ID, сгенерированный при последнем INSERT-запросе.
int AffectedRows(void)
Возвращает число затронуиых прошлой операцией рядов.
bool Close(void)
Закрывает текущее соединение с бд
——————————————————————
class SQLres
array Fetch([int $result_type = MYSQL_ASSOC]) int NumRows(void) int NumFields(void) bool DataSeek(int $row_number) bool FreeResult(void) string Element(string $key)
array Fetch([int $result_type = MYSQL_ASSOC])
Обрабатывает ряд результата запроса, возвращая ассоциативный массив (по умолчанию), численный массив или оба.
$users = $DB->Query('SELECT name FROM #_users WHERE'); while($user->Fetch()) echo $user->name; //либо так $users = $DB->Query('SELECT name FROM #_users WHERE'); while($user->Fetch()) echo $user->Element('name'); //либо так $users = $DB->Query('SELECT name FROM #_users WHERE'); while($user->Fetch(MYSQL_NUM)) echo $user->Element(0); //либо так $users = $DB->Query('SELECT name FROM #_users WHERE'); while($a = $user->Fetch()) echo $a[name];
int NumRows(void)
Возвращает количество рядов результата запроса
int NumFields(void)
Возвращает количество полей результата запроса
bool DataSeek(int $row_number)
Перемещает внутренний указатель в результате запроса
FreeResult()
Освобождает память от результата запроса
Скачать SQL class v1.7 Обновлен 24.10.09

Последние комментарии