* @return mixed
*/
function datatablesTotal($sQuery, $aParams = array()) {
- $sQuery = preg_replace("/SELECT .+ FROM/", "SELECT COUNT(*) FROM", $sQuery);
+ $sQuery = preg_replace('#SELECT\s.*?\sFROM#is', 'SELECT COUNT(*) FROM', $sQuery, 1);
$ps = $this->prepare($sQuery);
foreach ($aParams as $key => $val) {
- $ps->bindParam($key, $val);
+ $ps->bindParam($key, $val, is_int($val) ? PDO::PARAM_INT : PDO::PARAM_STR);
}
$ps->execute();
return $ps->fetch(PDO::FETCH_COLUMN);
$aaData = array();
$sQuery = "SELECT SQL_CALC_FOUND_ROWS uname,letters,words,line AS 'lines',actions,smileys,kicks,modes,topics FROM ustats WHERE chan=:channel AND type=:type AND letters > 0 ";
if ($datatables) {
- $iTotal = $this->db->datatablesTotal($sQuery, array(':type' => $type, ':channel' => $chan));
+ $iTotal = $this->db->datatablesTotal($sQuery, array(':type' => (int) $type, ':channel' => $chan));
$sFiltering = $this->db->datatablesFiltering(array('uname'));
$sOrdering = $this->db->datatablesOrdering(array('uname', 'letters', 'words', 'line', 'actions', 'smileys', 'kicks', 'modes', 'topics'));
$sPaging = $this->db->datatablesPaging();
$ps->bindParam(':type', $type, PDO::PARAM_INT);
$ps->bindParam(':channel', $chan, PDO::PARAM_STR);
$ps->execute();
- foreach ($ps->fetchAll(PDO::FETCH_ASSOC) as $row) {
+ $data = $ps->fetchAll(PDO::FETCH_ASSOC);
+ if ($datatables) {
+ $iFilteredTotal = $this->db->foundRows();
+ }
+ foreach ($data as $row) {
if ($datatables) {
$row["DT_RowId"] = $row['uname'];
}
$aaData[] = $user;
}
if ($datatables) {
- $iFilteredTotal = $this->db->foundRows();
return $this->db->datatablesOutput($iTotal, $iFilteredTotal, $aaData);
}
return $aaData;