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
written by admin
\\ tags: Class, MySql, PHP, SQL
Последние комментарии