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 <dev@holger-sielaff.de>
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;
}
}
/**
}}}}
*/
Скачать архивы
Скачать zip-архив со скриптом.
Скачать tar.gz-архив со скриптом.
23 мая 2013
4,268
0
Комментировать