http://wm-monitoring.ru/ ')) {alert('Спасибо за то что установили нашу кнопку! =)');} else {alert('Очень жаль! =(');}"> http://wm-monitoring.ru/

Главная Новости

Работа с базами данных через пакет PEAR MDB2

Опубликовано: 05.09.2018

PHP скрипт используется для выполнения запросов к базам данных, с помощью пакета PEAR MDB2. Пакет PEAR MDB2 (абстрактный слой баз данных) позволяет общаться с различными базами данных, предоствляя единый интерфейс.

Он устанавливает подключение к базе данных, используя DSN-строку.

Скрипт может выполнять запросы и кэшировать результаты, используя пакет Cache Lite, а также разбивать на страницы результаты запросов, используя пакет Pager.

Лицензия GPL 2.0.

Системные требования скрипта:

PHP не младше 5.0 версии.

Исходник скрипта

/** @package AutoDBRec @requires PEAR, MDB2 ,Cache/Lite, Pager @author Holger Sielaff @copyright 2010 - Holger Sielaff @license GPL <http://www.gnu.org/licenses/gpl-2.0.html> This package is free for use - exept for commercial proposes In this Case please contact the author <[email protected]> HOWTO: $result = AutoDBRec::newRec("SELECT * FROM test WHERE id = ?", $id); //returns object of first datarow $result = AutoDBRec::newArray("SELECT * FROM test WHERE id = ?", $id); //returns array of objects $result = AutoDBRec::newPaged("SELECT * FROM test WHERE id = ?", $id); //returns paged array of objects if set CACHE in fron of query, record is cached pEx: $result = AutoDBRec::newPaged("CACHE SELECT * FROM test WHERE id = ?", $id); */ require_once 'PEAR.php'; require_once 'MDB2.php'; require_once 'Cache/Lite.php'; require_once 'Pager.php'; /** DB Params */ if(!defined('DBType')) define('DBType', 'mysql'); if(!defined('DBHost')) define('DBHost', 'localhost'); if(!defined('DBName')) define('DBName', 'moebel'); if(!defined('DBPass')) define('DBPass', 'SIE7773'); if(!defined('DBUser')) define('DBUser', 'holger'); if(!defined('DBChar')) define('DBChar', 'utf8'); /** Cache Params */ if(!defined('CacheDir')) define('CacheDir', '/tmp/'); if(!defined('CacheLifetime')) define('CacheLifetime', 3600); /** Pager Params */ if(!defined('PagerPerPage')) define('PagerPerPage', 5); /** class AutoDBRec {{{{ */ class AutoDBRec{ public static $DB = null; public static $CACHE = null; public static function factory(){ if(!is_object(self::$DB)){ $_DSN_ = array('phptype' => DBType, 'username' => DBUser, 'password' => DBPass, 'hostspec' => DBHost, 'database' => DBName,); $_OPTIONS_ = array('debug' => 2, 'portability' => MDB2_PORTABILITY_ALL,); /** initiate DB Connection */ self::$DB =& MDB2::connect($_DSN_, $_OPTIONS_); self::$DB->setCharset(DBChar); if (PEAR::isError(self::$DB)){ die($_DB_->getMessage()); } } if(!is_object(self::$CACHE)){ /** initiate Cache Object */ $options = array('cacheDir' => CacheDir, 'lifeTime' => CacheLifetime, 'automaticSerialization' => true ); self::$CACHE = new Cache_Lite($options); } return true; } public function newArray(){ self::factory(); $args = func_get_args(); $ret = array(); $args = self::cummulate($args); list($Q, $C) = self::_query($args); if($C){ $CID = md5($Q); if($cres = self::cache($CID, 'get')){ return $cres; } } $res =& self::$DB->query($Q); if (PEAR::isError($res)) { die($res->getMessage()); } while($r = $res->fetchRow(MDB2_FETCHMODE_OBJECT)){ $ret[] = $r; } return $C ? self::cache($CID, 'save', $ret) : $ret; } public function newRec(){ self::factory(); $args = func_get_args(); $args = self::cummulate($args); $ret = false; list($Q, $C) = self::_query($args); if($C){ $CID = md5($Q); if(false !== ($cres = self::cache($CID, 'get'))){ return $cres; } } $res =& self::$DB->query($Q); if (PEAR::isError($res)) { die($res->getMessage()); } while($r = $res->fetchRow(MDB2_FETCHMODE_OBJECT)){ return $C ? self::cache($CID, 'save', $r) : $r; break; } } public static function newPaged(){ self::factory(); $args = func_get_args(); if($_POST['PagerPerPage'] > 0) define('PagerPerPage', (int)$_POST['PagerPerPage']); if($_GET['PagerPerPage'] > 0) define('PagerPerPage', (int)$_GET['PagerPerPage']); $options = array('itemData' => self::newArray($args), 'perPage' => PagerPerPage, 'urlVar' => md5($args[0])); $_ = Pager::factory($options); return $_; } public static function pagerOptions(&$pager, $options = array()){ /** @see http://pear.php.net/manual/en/package.html.pager.factory.php for documentation */ $pager->setOptions($options); $pager->build(); } public static function getPagerData($pager){ /** @see http://pear.php.net/manual/en/package.html.pager.php for documentation */ return $pager->getPageData(); } public static function getPagerLinks($pager, $parse = false){ /** @see http://pear.php.net/manual/en/package.html.pager.php for documentation */ $_ = $pager->getLinks(); return $parse ? $_[5] : $_; } public static function cache($id, $method = 'get', $data = null){ if($method == 'get'){ if($ret = self::$CACHE->get($id)){ return $ret; }else{ if($data){ self::$CACHE->save($data, $id); return $data; } } }elseif($method == 'save'){ if(self::$CACHE->save($data, $id)){ return $data; }else{ } } return false; } public function _query($args){ $_ = array(); $query = trim(array_shift($args)); if(preg_match('/^CACHE\s+/i', $query)){ $_[] = true; $query = preg_replace('/^CACHE\s+/i', '', $query); }else{ $_[] = false; } $query = preg_replace('/\'\s*?\?\\s*?\'/', '?', $query); $query = preg_replace('/%/', '%%', $query); $query = preg_replace('/\?/','%s', $query); # fГјr sprintf vorbereiten $query = vsprintf($query, self::mysql_escape_and_quote($args)); $query = preg_replace('/LIKE *(%*)\'(.*)\'(%*)/i', "LIKE '\\1\\2\\3'", $query); $_[] = $query; return array_reverse($_); } public function quoteSmart($in){ $NOQUOTES = array('NOW()', 'TIME()', 'DATE()', 'NULL'); $in = trim((string)$in); if($in{0} == "'" && $in{strlen($in) - 1} == "'"){ $in = substr($in, 1, -1); } if(is_int($in) || in_array($in, $NOQUOTES)) { return $in; }elseif (is_int($in)) { return $in; }elseif (is_bool($in)) { return self::quoteBoolean($in); }elseif (is_null($in)) { return 'NULL'; }else{ return self::quoteString($in); } } public function quoteBoolean($boolean) { return $boolean ? '1' : 'NULL'; } public function quoteFloat($float) { return "'".self::escapeSimple(str_replace(',', '.', strval(floatval($float))))."'"; } public function quoteString($string) { return "'".self::escapeSimple($string)."'"; } public function escapeSimple($str){ return mysql_escape_string(htmlentities($str, ENT_NOQUOTES, "UTF-8")); } public function mysql_escape_and_quote($thing){ $ret = array(); if(is_array($thing) || is_object($thing)){ foreach($thing as $key => $val){ $ret[$key] = self::quoteSmart($val); } return $ret; }else{ return self::quoteSmart($thing); } } public static function cummulate($args){ return (is_array($args[0])) ? $args[0] : $args; } } /** }}}} */

Скачать архивы

Олгер Силаф

2474

Комментировать

Карта
rss