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); }
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); }
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); }