Tags:
Для личного использования я написал простенький класс для работы с базой данных MySQL. В примере описаны основные моменты подключения к БД и пара часто используемых функций обработки запросов. Методы обработки ошибок вырезаны для наглядности примера, оставлены только фатальные выходы.
Итак, поехали...
<?php
class mysql
{
// публичное свойство класса для ключей получаемых массивов
public $resultType = MYSQL_ASSOC;
private $conn_id; // приватное свойство - идентификатор соединения
private $database; // приватное свойство - префикс таблиц
private $table_prefix; // приватное свойство - имя БД
/******************************************************************
* Конструктор класса. Вызавается при объявлении класса.
*
* На входе: $settings - ассоциативный массив
* ['host'] - имя или IP сервера БД
* ['login'] - логин пользователя БД
* ['password'] - пароль пользователя БД
* ['p_conn'] - постоянное соединение (true/false)
* ['charset'] - кодировка соединения
* ['table_prefix']- префикс таблиц
* ['database'] - имя БД
*
* На выходе: -
*
* При успешном соединении задает значения свойств класса
*
******************************************************************/
public function __construct($settings = NULL)
{
// соединяемся с сервером в зависимости от параметра 'p_conn'
if ($settings['p_conn'])
$this->conn_id = @mysql_pconnect($settings['host'], $settings['login'], $settings['password']);
else
$this->conn_id = @mysql_connect($settings['host'], $settings['login'], $settings['password']);
// при неудачном соединении завершаем работу скрипта и выдаем текст ошибки
if (!$this->conn_id) die('Can\'t connect MySQL server!!!');
// задаем кодировку соединения
mysql_set_charset($settings['charset'], $this->conn_id);
// задаем приватные свойства
$this->table_prefix = $settings['table_prefix'];
$this->database = $settings['database'];
}
/******************************************************************
* Деструктор класса. Инициализируется автоматически в конце работы скрипта
*
* На входе: -
* На выходе: -
*
* Закрывает соединение с БД
*
******************************************************************/
public function __destruct()
{
return mysql_close($this->conn_id);
}
/******************************************************************
* Основной публичный метод класса для подачи запроса в БД
*
* На входе: SQL запрос (строка)
* На выходе: сырой MySQL result
*
******************************************************************/
public function query($sql)
{
// подача запроса
$result = mysql_query($sql, $this->conn_id);
// в случае возникновения ошибки выдаем сообщение и останавливаем работу скрипта
if (mysql_errno($this->conn_id) > 0)
{
echo $sql . '<br/>';
// у меня сервер MySQL с русской локализацией в кодировке
// KOI8-R, а WEB сервер выдает UTF-8
// для этого я конверчу текст ошибки (не обязательно)
exit(mysql_errno($this->conn_id) . ': ' . iconv('koi8r','utf8',mysql_error($this->conn_id)));
}
return $result;
}
/******************************************************************
* преобразование имени таблицы
*
* На входе: имя таблицы (строка)
* На выходе: `database`.`prefix_table` (строка)
*
******************************************************************/
public function table($tb_name = NULL)
{
return '`' . $this->database . '`.`' . $this->table_prefix . $tb_name . '`';
}
/*******************************************************************
* Вспомогалельные функции
*******************************************************************/
/******************************************************************
* получить все строки в массив
*
* На входе: SQL запрос (строка)
* На выходе: двумерный массив, где первый уровень является строкой,
* второй - колонкой (имя ключа зависит от свойства 'resultType')
*
******************************************************************/
public function getAll($sql)
{
$res = $this->query($sql);
$arr = array();
while ($row = mysql_fetch_array($res, $this->resultType))
{
$arr[] = $row;
}
return $arr;
}
/******************************************************************
* получить только одну строку в массив
*
* На входе: SQL запрос (строка)
* На выходе: одномерный массив (имя ключа зависит от свойства 'resultType')
*
******************************************************************/
public function getRow($sql)
{
$res = $this->query($sql);
$row = mysql_fetch_array($res, $this->resultType);
return $row;
}
/******************************************************************
* получить одно значение
*
* На входе: SQL запрос (строка)
* На выходе: значение "верхней левой" ячейки (строка)
*
******************************************************************/
public function getOne($sql)
{
$res = $this->query($sql);
$row = mysql_fetch_array($res);
return $row[0];
}
}
?>
Как этим пользоваться
Создаем в базе данных таблицу
Назначение полей я объяснять не буду. Разберетесь :)
CREATE TABLE IF NOT EXISTS `pref_article` ( `article_id` int(11) NOT NULL auto_increment, `article_title` varchar(200) NOT NULL, `article_content` text NOT NULL, `is_open` tinyint(1) NOT NULL, PRIMARY KEY (`article_id`), KEY `is_open` (`is_open`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
Заполним таблицу данными
INSERT INTO `pref_article` (`article_title`, `article_content`, `is_open`) VALUES
('статья номер 1', 'это текст статьи 1', 1),
('статья номер 2', 'это текст статьи 2', 1);
назовем файл с классом cls_mysql.php и разместим его в директории classes
дерево категорий сайта будет выглядеть так:
[public_http]
+- [classes]
| +- cls_mysql.php
|
+ index.php
Файл /index.php будет содержать следующий код
<?php
$conf_db = array('host' => 'localhost',
'login' => 'my_login',
'password' => 'my_password',
'p_conn' => true,
'charset' => 'utf8',
'table_prefix' => 'pref_',
'database' => 'example')
include_once ('classes/cls_mysql.php');
$db = new mysql($conf_db); unset($conf_db);
// пример запроса к БД
// обратите внимание: в строку запроса имя таблицы мы вставляем через метод
// класса (без указания имени базы и префикса)
$sql = 'SELECT * FROM ' . $db->table('article') . ' WHERE is_open=1';
echo '<pre>';
// получим массив содержащий ВСЕ строки удовлетворяющими условию
print_r( $db->GetAll($sql) );
// получим ПЕРВУЮ строку удовлетворяющую условию
print_r( $db->GetRow($sql) );
// получим значение ОДНОЙ (верхней левой) ячейки
print_r( $db->GetOne($sql) );
echo '</pre>';
?>
На этом все. Обработку ошибок я оставляю Вам :)
