Пример использования статического класса для удобной работы с базой
PHP продолжает развиваться и с каждой новой версией радует всякими плюшками.
Вот захотел поделится интересной идеей использования статических классов на php.
Задачи которые должен был реализовывать класс:
1. Уменьшать количество буков которые надо набирать(минимум лишней писанины)
2. Соединение с базой должно происходить непосредственно при необходимости(перед запросом)
3. Упростить жизнь, если в дальнейшем захочется сменить базу данных.
собственно хоть в конфиге делаем
require_once 'Sql.php';
Sql::initialize($connectionString);
Ну а дальше всё просто и лаконично: Sql::query($sql); $fn = Sql::fetchField('field_name'); $ff = Sql::fetchAll();
p.s. Пример для postgre, но я думаю если идея понравится как переделать под mysql, уже можно сообразить.
Вот захотел поделится интересной идеей использования статических классов на php.
Задачи которые должен был реализовывать класс:
1. Уменьшать количество буков которые надо набирать(минимум лишней писанины)
2. Соединение с базой должно происходить непосредственно при необходимости(перед запросом)
3. Упростить жизнь, если в дальнейшем захочется сменить базу данных.
собственно хоть в конфиге делаем
require_once 'Sql.php';
Sql::initialize($connectionString);
Ну а дальше всё просто и лаконично: Sql::query($sql); $fn = Sql::fetchField('field_name'); $ff = Sql::fetchAll();
class Sql
{
static protected $params;
static public $connected = 0;
static public $handle;
static public $res;
static public $history = array();
static public $save_history = 0;
static function initialize($connection_string)
{
static::$params = $connection_string;
}
static function connect()
{
if (self::$save_history) $b = microtime(true);
static::$handle = pg_pconnect(static::$params) or die('Postgres ' . get_called_class() . ' connection failed!');
if (self::$save_history) self::$history[] = number_format(microtime(true) - $b, 8) . ' ' . get_called_class() . ' connect';
static::$connected = 1;
}
static function query($q)
{
if (!static::$connected) self::connect();
if (self::$save_history) $b = microtime(true);
static::$res = @pg_query(static::$handle, $q) or die('SQL ERROR! ' . error_log($q . "\n" . pg_last_error(static::$handle)));
if (self::$save_history) self::$history[] = number_format(microtime(true) - $b, 8) . ': ' . preg_replace('/\s+/', ' ', $q);
return static::$res;
}
static function numRows($handle = null)
{
if (!$handle) $handle = static::$res;
if (!static::$connected) self::connect();
if (!$handle) return false;
return pg_num_rows($handle);
}
static function lastId($handle = null)
{
if (!$handle) $handle = static::$res;
if (!self::$connected) self::connect();
if (!$handle) return false;
return pg_last_oid($handle);
}
static function fetchAssoc($handle = null, $row = null)
{
if (!$handle) $handle = static::$res;
if (!static::$connected) self::connect();
if (!$handle) return false;
return pg_fetch_assoc($handle, $row);
}
static function fetchArray($handle = null, $row = null)
{
if (!$handle) $handle = static::$res;
if (!static::$connected) self::connect();
if (!$handle) return false;
return pg_fetch_array($handle, $row, PGSQL_NUM);
}
static function fetchField($field, $row = 0, $handle = null)
{
if (!$handle) $handle = static::$res;
if (!static::$connected) self::connect();
if (!$handle) return false;
return pg_fetch_result($handle, $row, $field);
}
static function fetchAll($handle = null)
{
if (!$handle) $handle = static::$res;
if (!static::$connected) self::connect();
if (!$handle) return false;
return pg_fetch_all($handle);
}
static function freeResult($handle = null)
{
if (!$handle) $handle = static::$res;
if (!$handle) return false;
return pg_free_result($handle);
}
static function escapeString($s)
{
if (!static::$connected) self::connect();
return pg_escape_string(static::$handle, $s);
}
static function dumplog()
{
return '
'</font> . dump(self::$history, <font color="#0000ff">true</font>) . <font color="#A31515">'
';
}
}
p.s. Пример для postgre, но я думаю если идея понравится как переделать под mysql, уже можно сообразить.
0 комментариев