⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pager_wrapper.php

📁 视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.
💻 PHP
字号:
<?php// CVS: $Id: Pager_Wrapper.php,v 1.21 2005/10/20 19:16:57 quipo Exp $//// Pager_Wrapper// -------------//// Ready-to-use wrappers for paging the result of a query,// when fetching the whole resultset is NOT an option.// This is a performance- and memory-savvy method// to use PEAR::Pager with a database.// With this approach, the network load can be// consistently smaller than with PEAR::DB_Pager.//// The following wrappers are provided: one for each PEAR// db abstraction layer (DB, MDB and MDB2), one for// PEAR::DB_DataObject, and one for the PHP Eclipse library////// SAMPLE USAGE// ------------//// $query = 'SELECT this, that FROM mytable';// require_once 'Pager_Wrapper.php'; //this file// $pagerOptions = array(//     'mode'    => 'Sliding',//     'delta'   => 2,//     'perPage' => 15,// );// $paged_data = Pager_Wrapper_MDB2($db, $query, $pagerOptions);// //$paged_data['data'];  //paged data// //$paged_data['links']; //xhtml links for page navigation// //$paged_data['page_numbers']; //array('current', 'total');///** * Helper method - Rewrite the query into a "SELECT COUNT(*)" query. * @param string $sql query * @return string rewritten query OR false if the query can't be rewritten * @access private */function rewriteCountQuery($sql){    if (preg_match('/^\s*SELECT\s+\bDISTINCT\b/is', $sql) || preg_match('/\s+GROUP\s+BY\s+/is', $sql)) {        return false;    }    $queryCount = preg_replace('/(?:.*)\bFROM\b\s+/Uims', 'SELECT COUNT(*) FROM ', $sql, 1);    list($queryCount, ) = preg_split('/\s+ORDER\s+BY\s+/is', $queryCount);    list($queryCount, ) = preg_split('/\bLIMIT\b/is', $queryCount);    return trim($queryCount);}/** * @param object PEAR::DB instance * @param string db query * @param array  PEAR::Pager options * @param boolean Disable pagination (get all results) * @param integer fetch mode constant * @param mixed  parameters for query placeholders *        If you use placeholders for table names or column names, please *        count the # of items returned by the query and pass it as an option: *        $pager_options['totalItems'] = count_records('some query'); * @return array with links and paged data */function Pager_Wrapper_DB(&$db, $query, $pager_options = array(), $disabled = false, $fetchMode = DB_FETCHMODE_ASSOC, $dbparams = null){   if (!array_key_exists('totalItems', $pager_options)) {        //  be smart and try to guess the total number of records        if ($countQuery = rewriteCountQuery($query)) {            $totalItems = $db->getOne($countQuery, $dbparams);            if (PEAR::isError($totalItems)) {                return $totalItems;            }        } else {            $res =& $db->query($query, $dbparams);            if (PEAR::isError($res)) {                return $res;            }            $totalItems = (int)$res->numRows();            $res->free();        }        $pager_options['totalItems'] = $totalItems;    }    require_once 'Pager/Pager.php';    $pager = Pager::factory($pager_options);    $page = array();    $page['totalItems'] = $pager_options['totalItems'];    $page['links'] = $pager->links;    $page['page_numbers'] = array(        'current' => $pager->getCurrentPageID(),        'total'   => $pager->numPages()    );    list($page['from'], $page['to']) = $pager->getOffsetByPageId();    $res = ($disabled)        ? $db->limitQuery($query, 0, $totalItems, $dbparams)        : $db->limitQuery($query, $page['from']-1, $pager_options['perPage'], $dbparams);    if (PEAR::isError($res)) {        return $res;    }    $page['data'] = array();    while ($res->fetchInto($row, $fetchMode)) {       $page['data'][] = $row;    }    if ($disabled) {        $page['links'] = '';        $page['page_numbers'] = array(            'current' => 1,            'total'   => 1        );    }    return $page;}/** * @param object PEAR::MDB instance * @param string db query * @param array  PEAR::Pager options * @param boolean Disable pagination (get all results) * @param integer fetch mode constant * @return array with links and paged data */function Pager_Wrapper_MDB(&$db, $query, $pager_options = array(), $disabled = false, $fetchMode = MDB_FETCHMODE_ASSOC){    if (!array_key_exists('totalItems', $pager_options)) {        //be smart and try to guess the total number of records        if ($countQuery = rewriteCountQuery($query)) {            $totalItems = $db->queryOne($countQuery);            if (PEAR::isError($totalItems)) {                return $totalItems;            }        } else {            $res = $db->query($query);            if (PEAR::isError($res)) {                return $res;            }            $totalItems = (int)$db->numRows($res);            $db->freeResult($res);        }        $pager_options['totalItems'] = $totalItems;    }    require_once 'Pager/Pager.php';    $pager = Pager::factory($pager_options);    $page = array();    $page['totalItems'] = $pager_options['totalItems'];    $page['links'] = $pager->links;    $page['page_numbers'] = array(        'current' => $pager->getCurrentPageID(),        'total'   => $pager->numPages()    );    list($page['from'], $page['to']) = $pager->getOffsetByPageId();    $res = ($disabled)        ? $db->limitQuery($query, null, 0, $totalItems)        : $db->limitQuery($query, null, $page['from']-1, $pager_options['perPage']);    if (PEAR::isError($res)) {        return $res;    }    $page['data'] = array();    while ($row = $db->fetchInto($res, $fetchMode)) {        $page['data'][] = $row;    }    if ($disabled) {        $page['links'] = '';        $page['page_numbers'] = array(            'current' => 1,            'total'   => 1        );    }    return $page;}/** * @param object PEAR::MDB2 instance * @param string db query * @param array  PEAR::Pager options * @param boolean Disable pagination (get all results) * @param integer fetch mode constant * @return array with links and paged data */function Pager_Wrapper_MDB2(&$db, $query, $pager_options = array(), $disabled = false, $fetchMode = MDB2_FETCHMODE_ASSOC){    if (!array_key_exists('totalItems', $pager_options)) {        //be smart and try to guess the total number of records        if ($countQuery = rewriteCountQuery($query)) {            $totalItems = $db->queryOne($countQuery);            if (PEAR::isError($totalItems)) {                return $totalItems;            }        } else {            //GROUP BY => fetch the whole resultset and count the rows returned            $res =& $db->queryCol($query);            if (PEAR::isError($res)) {                return $res;            }            $totalItems = count($res);        }        $pager_options['totalItems'] = $totalItems;    }    require_once 'Pager/Pager.php';    $pager = Pager::factory($pager_options);    $page = array();    $page['links'] = $pager->links;    $page['totalItems'] = $pager_options['totalItems'];    $page['page_numbers'] = array(        'current' => $pager->getCurrentPageID(),        'total'   => $pager->numPages()    );    list($page['from'], $page['to']) = $pager->getOffsetByPageId();    $page['limit'] = $page['to'] - $page['from'] +1;    if (!$disabled) {        $db->setLimit($pager_options['perPage'], $page['from']-1);    }    $page['data'] = $db->queryAll($query, null, $fetchMode);    if (PEAR::isError($page['data'])) {        return $page['data'];    }    if ($disabled) {        $page['links'] = '';        $page['page_numbers'] = array(            'current' => 1,            'total'   => 1        );    }    return $page;}/** * @param object PEAR::DataObject instance * @param array  PEAR::Pager options * @param boolean Disable pagination (get all results) * @return array with links and paged data * @author Massimiliano Arione <garak@studenti.it> */function Pager_Wrapper_DBDO(&$db, $pager_options = array(), $disabled = false){    if (!array_key_exists('totalItems', $pager_options)) {        $totalItems = $db->count();        $pager_options['totalItems'] = $totalItems;    }    require_once 'Pager/Pager.php';    $pager = Pager::factory($pager_options);    $page = array();    $page['links'] = $pager->links;    $page['totalItems'] = $pager_options['totalItems'];    $page['page_numbers'] = array(        'current' => $pager->getCurrentPageID(),        'total'   => $pager->numPages()    );    list($page['from'], $page['to']) = $pager->getOffsetByPageId();    $page['limit'] = $page['to'] - $page['from'] + 1;    if (!$disabled) {        $db->limit($page['from'] - 1, $pager_options['perPage']);    }    $db->find();    while ($db->fetch()) {        $db->getLinks();        $page['data'][] = $db->toArray('%s', true);    }    return $page;}/** * @param object PHP Eclipse instance * @param string db query * @param array  PEAR::Pager options * @param boolean Disable pagination (get all results) * @return array with links and paged data * @author Matte Edens <matte@arubanetworks.com> * @see http://sourceforge.net/projects/eclipselib/ */function Pager_Wrapper_Eclipse(&$db, $query, $pager_options = array(), $disabled = false){    if (!$disabled) {        require_once(ECLIPSE_ROOT . 'PagedQuery.php');        $query =& new PagedQuery($db->query($query), $pager_options['perPage']);        $totalrows = $query->getRowCount();        $numpages  = $query->getPageCount();        $whichpage = isset($_GET[$pager_options['urlVar']]) ? (int)$_GET[$pager_options['urlVar']] - 1 : 0;        if ($whichpage >= $numpages) {            $whichpage = $numpages - 1;        }        $result = $query->getPage($whichpage);    } else {        $result    = $db->query($query);        $totalrows = $result->getRowCount();        $numpages  = 1;    }    if (!$result->isSuccess()) {        return PEAR::raiseError($result->getErrorMessage());    }    if (!array_key_exists('totalItems', $pager_options)) {        $pager_options['totalItems'] = $totalrows;    }    $page = array();    require_once(ECLIPSE_ROOT . 'QueryIterator.php');    for ($it =& new QueryIterator($result); $it->isValid(); $it->next()) {        $page['data'][] =& $it->getCurrent();    }    require_once 'Pager/Pager.php';    $pager = Pager::factory($pager_options);    $page['links']        = $pager->links;    $page['totalItems']   = $pager_options['totalItems'];    $page['page_numbers'] = array(        'current' => $pager->getCurrentPageID(),        'total'   => $numpages    );	$page['perPageSelectBox'] = $pager->getperpageselectbox();    list($page['from'], $page['to']) = $pager->getOffsetByPageId();    $page['limit'] = $page['to'] - $page['from'] +1;    if ($disabled) {        $page['links'] = '';        $page['page_numbers'] = array(            'current' => 1,            'total'   => 1        );    }    return $page;}?>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -