コード例 #1
0
function runsql($paramarr, $bbsdb = '', $returncount = 0, $multicachekey = '')
{
    global $_G, $_SGLOBAL, $_SBLOCK;
    //處理SQL
    $sqlstring = getblocksql($paramarr['sql']);
    //初始化
    $listcount = 1;
    //連接數據庫
    //$thedb = empty($bbsdb)?$_SGLOBAL['db']:$bbsdb;
    //分頁
    if (!empty($paramarr['perpage'])) {
        $countsql = '';
        if (empty($countsql)) {
            $countsql = getcountsql($sqlstring, 'SELECT(.+?)FROM(.+?)WHERE(.+?)ORDER', 2, 3);
        }
        if (empty($countsql)) {
            $countsql = getcountsql($sqlstring, 'SELECT(.+?)FROM(.+?)WHERE(.+?)LIMIT', 2, 3);
        }
        if (empty($countsql)) {
            $countsql = getcountsql($sqlstring, 'SELECT(.+?)FROM(.+?)WHERE(.+?)$', 2, 3);
        }
        if (empty($countsql)) {
            $countsql = getcountsql($sqlstring, 'SELECT(.+?)FROM(.+?)ORDER', 2, -1);
        }
        if (empty($countsql)) {
            $countsql = getcountsql($sqlstring, 'SELECT(.+?)FROM(.+?)LIMIT', 2, -1);
        }
        if (empty($countsql)) {
            $countsql = getcountsql($sqlstring, 'SELECT(.+?)FROM(.+?)$', 2, -1);
        }
        if (!empty($countsql)) {
            if ($returncount > 0) {
                //需要更新計數緩存時
                $listcount = DB::result_first($countsql);
                return $listcount;
            } else {
                //無需更新緩存時
                $listcount = intval(unserialize($_SBLOCK[$multicachekey]['value']));
            }
            if ($listcount) {
                $paramarr['perpage'] = intval($paramarr['perpage']);
                if (empty($paramarr['perpage'])) {
                    $paramarr['perpage'] = 20;
                }
                if (empty($_G['page'])) {
                    $_G['page'] = 1;
                }
                $_G['page'] = intval($_G['page']);
                if ($_G['page'] < 1) {
                    $_G['page'] = 1;
                }
                $start = ($_G['page'] - 1) * $paramarr['perpage'];
                //SQL文
                $sqlstring = preg_replace("/ LIMIT(.+?)\$/is", '', $sqlstring);
                $sqlstring .= ' LIMIT ' . $start . ',' . $paramarr['perpage'];
            }
        }
    } elseif (!empty($paramarr['limit'])) {
        $paramarr['limit'] = getdotstring($paramarr['limit'], 'int', true, array(), 1, false);
        if ($paramarr['limit']) {
            //SQL文
            $sqlstring = preg_replace("/ LIMIT(.+?)\$/is", '', $sqlstring);
            $sqlstring .= ' LIMIT ' . $paramarr['limit'];
        }
    }
    return array($sqlstring, $listcount);
}
コード例 #2
0
ファイル: function_block.php プロジェクト: v998/discuzx-en
function getparamsql($paramarr)
{
    global $_SGLOBAL;
    $paramarr['sql'] = preg_replace("/\\[(\\d+)\\]/e", 'mksqltime(\'\\1\')', $paramarr['sql']);
    $sqlstring = 'SELECT' . preg_replace("/^(select)/i", '', str_replace(';', '', trim($paramarr['sql'])));
    if (empty($paramarr['perpage'])) {
        return array('count' => 1, 'sql' => $sqlstring, 'multi' => '');
    }
    $listcount = 0;
    $countsql = '';
    if (empty($countsql)) {
        $countsql = getcountsql($sqlstring, 'SELECT\\s(.+?)\\sFROM\\s(.+?)\\sWHERE\\s(.+?)\\sORDER', 2, 3);
    }
    if (empty($countsql)) {
        $countsql = getcountsql($sqlstring, 'SELECT\\s(.+?)\\sFROM\\s(.+?)\\sWHERE\\s(.+?)\\sLIMIT', 2, 3);
    }
    if (empty($countsql)) {
        $countsql = getcountsql($sqlstring, 'SELECT\\s(.+?)\\sFROM\\s(.+?)\\sWHERE\\s(.+?)$', 2, 3);
    }
    if (empty($countsql)) {
        $countsql = getcountsql($sqlstring, 'SELECT\\s(.+?)\\sFROM\\s(.+?)\\sORDER', 2, -1);
    }
    if (empty($countsql)) {
        $countsql = getcountsql($sqlstring, 'SELECT\\s(.+?)\\sFROM\\s(.+?)\\sLIMIT', 2, -1);
    }
    if (empty($countsql)) {
        $countsql = getcountsql($sqlstring, 'SELECT\\s(.+?)\\sFROM\\s(.+?)$', 2, -1);
    }
    if (!empty($countsql)) {
        $query = $_SGLOBAL['db']->query($countsql);
        $listcount = $_SGLOBAL['db']->result($query, 0);
        if ($listcount) {
            //页数
            $start = ($_GET['page'] - 1) * $paramarr['perpage'];
            //页面url
            $urlplus = array();
            foreach ($_GET as $key => $value) {
                if ($key != 'page') {
                    $urlplus[] = rawurlencode($key) . '=' . rawurlencode($value);
                }
            }
            $mpurl = $_SERVER['PHP_SELF'] . (empty($urlplus) ? '' : '?' . implode('&', $urlplus));
            //判断页数是否超出范围
            if ($start >= $listcount) {
                showmessage('page_number_is_beyond', $mpurl, 0);
            }
            // pagination 链接
            $multi = multi($listcount, $paramarr['perpage'], $_GET['page'], $mpurl);
            //SQL文
            $sqlstring = preg_replace("/ LIMIT(.+?)\$/is", '', $sqlstring);
            $sqlstring .= ' LIMIT ' . $start . ',' . $paramarr['perpage'];
        }
    }
    return array('count' => $listcount, 'sql' => $sqlstring, 'multi' => $multi);
}
コード例 #3
0
ファイル: block_sql.func.php プロジェクト: cwcw/cms
function runsql($paramarr, $bbsdb = '')
{
    global $_SGLOBAL, $_SGET;
    //处理SQL
    $sqlstring = getblocksql($paramarr['sql']);
    //初始化
    $listcount = 1;
    //连接数据库
    $thedb = empty($bbsdb) ? $_SGLOBAL['db'] : $bbsdb;
    //分页
    if (!empty($paramarr['perpage'])) {
        $countsql = '';
        if (empty($countsql)) {
            $countsql = getcountsql($sqlstring, 'SELECT(.+?)FROM(.+?)WHERE(.+?)ORDER', 2, 3);
        }
        if (empty($countsql)) {
            $countsql = getcountsql($sqlstring, 'SELECT(.+?)FROM(.+?)WHERE(.+?)LIMIT', 2, 3);
        }
        if (empty($countsql)) {
            $countsql = getcountsql($sqlstring, 'SELECT(.+?)FROM(.+?)WHERE(.+?)$', 2, 3);
        }
        if (empty($countsql)) {
            $countsql = getcountsql($sqlstring, 'SELECT(.+?)FROM(.+?)ORDER', 2, -1);
        }
        if (empty($countsql)) {
            $countsql = getcountsql($sqlstring, 'SELECT(.+?)FROM(.+?)LIMIT', 2, -1);
        }
        if (empty($countsql)) {
            $countsql = getcountsql($sqlstring, 'SELECT(.+?)FROM(.+?)$', 2, -1);
        }
        if (!empty($countsql)) {
            $query = $thedb->query($countsql);
            $listcount = $thedb->result($query, 0);
            if ($listcount) {
                $paramarr['perpage'] = intval($paramarr['perpage']);
                if (empty($paramarr['perpage'])) {
                    $paramarr['perpage'] = 20;
                }
                if (empty($_SGET['page'])) {
                    $_SGET['page'] = 1;
                }
                $_SGET['page'] = intval($_SGET['page']);
                if ($_SGET['page'] < 1) {
                    $_SGET['page'] = 1;
                }
                $start = ($_SGET['page'] - 1) * $paramarr['perpage'];
                //SQL文
                $sqlstring = preg_replace("/ LIMIT(.+?)\$/is", '', $sqlstring);
                $sqlstring .= ' LIMIT ' . $start . ',' . $paramarr['perpage'];
            }
        }
    } elseif (!empty($paramarr['limit'])) {
        $paramarr['limit'] = getdotstring($paramarr['limit'], 'int', true, array(), 1, false);
        if ($paramarr['limit']) {
            //SQL文
            $sqlstring = preg_replace("/ LIMIT(.+?)\$/is", '', $sqlstring);
            $sqlstring .= ' LIMIT ' . $paramarr['limit'];
        }
    }
    return array($sqlstring, $listcount);
}