*****************************************************************************/
require_once(dirname(__FILE__).'/nb.php');
require_once(dirname(__FILE__).'/db/table.php');
+define('SQL_NAME_FORCE_QUOTE_EXP','^(range)$');
if (!defined('DB_HTML_FORM_BUTTONS')) define('DB_HTML_FORM_BUTTONS',''
#.'<input type="button" class="button" value="Add" onclick="this.setAttribute(\'type\',\'submit\');this.setAttribute(\'name\',\'edit\')?1:1"/>'
#.'<input type="button" class="button" value="Add" onclick="this.setAttribute(\'name\',\'edit\');this.parentElement.submit()?0:0"/>'
}
function sql_name($value) {
- if (preg_match('/^\w+$/',$value)) return $value;
+ if (preg_match('/^\w+$/',$value) and
+ (
+ !SQL_NAME_FORCE_QUOTE_EXP or
+ !preg_match('/'.SQL_NAME_FORCE_QUOTE_EXP.'/',$value)
+ )
+ ) return $value;
if ($this->type == 'mysql') return '`'.$value.'`';
return '"'.$value.'"';
}
//
// Select
//
- $sql = "SELECT *" . $this->select_extras();
+ $sql = "SELECT".($this->db->type =='mysql' ? " SQL_CALC_FOUND_ROWS" : "")." *" . $this->select_extras();
$sql .= " FROM ".$this->sql_name().$this->where_criterias($this->p(),$this->p('op'));
$this->sql = $sql;
$this->debug($sql,1);
- //
- // Tot
- //
- $query = $this->db->conn->query("SELECT count(*) FROM ($sql) count",PDO::FETCH_COLUMN,0);
- if (!$query) {
- $err = $this->db->conn->errorInfo();
- $err[] = $sql;
- err(join(' | ',$err));
- return $err[0];
- }
- $tot = $query->fetch();
- #if (!$tot) return;
-
if ($this->p('sort')) $sql .= ' ORDER BY '.$this->p('sort');
if ($this->p('limit')) {
}
- $opt['count'] = $count;
+ //
+ // Tot
+ //
+ if ($this->db->type =='mysql') {
+ $query = $this->db->conn->query('SELECT FOUND_ROWS()');
+ } else {
+ $query = $this->db->conn->query("SELECT count(*)".preg_replace('/^SELECT .*?FROM/',' FROM',$sql));
+ #$query = $this->db->conn->query("SELECT count(*) FROM ($sql) count");
+ }
+ if (!$query) {
+ $err = $this->db->conn->errorInfo();
+ $err[] = $sql;
+ err(join(' | ',$err));
+ return $err[0];
+ }
+ $tot = $query->fetch(PDO::FETCH_COLUMN);
$opt['tot'] = $tot;
+ #if (!$tot) return;
+
+ $opt['count'] = $count;
$opt['limit'] = $limit;
echo $this->{"rows_end_$format"}($opt);
if ($opt['is_html']) echo '<div id="nav_bottom" class="nav bottom">'