Topic: [Codeigniter]fix bug about IFNULL(COUNT('id'),0)

modify function "select()" in "system\database\DB_active_rec.php".

    public function select($select = '*', $escape = NULL)
    {
        if (is_string($select))
        {
            $arrTmp = array();
            $arrSymbol1 = '"({`';
            $arrSymbol2 = '")}`';
            $currSymbol = -1;
            $currSymbolCount = 0;
            $countArr = strlen($arrSymbol1);
            $stringlen = strlen($select);
            $prevPos = 0;
            $bInSymbol = false;
           
            for($i = 0; $i < $stringlen; $i++) {
                $currChar = $select[$i];
               
                if(!$bInSymbol) {
                    for($j = 0; $j < $countArr; $j++) {
                        if($currChar == $arrSymbol1[$j]) {
                            $bInSymbol = true;
                            $currSymbol = $j;
                            $currSymbolCount++;
                            break;   
                        }
                    }
                } else {
                    if($currChar == $arrSymbol2[$currSymbol]) {
                        $currSymbolCount--;
                    } else if($currChar == $arrSymbol1[$currSymbol]) {
                        $currSymbolCount++;
                    }
                   
                    if($currSymbolCount == 0) {
                        $bInSymbol = false;
                    }
                }
               
                if($bInSymbol)
                    continue;
               
                if(',' == $currChar) {
                    array_push($arrTmp, substr($select, $prevPos, $i - $prevPos));
                    $prevPos = $i + 1;
                }
            }
           
            if($prevPos < ($stringlen - 1)) {
                array_push($arrTmp, substr($select, $prevPos));
            }
           
            $select = $arrTmp;

//            $select = explode(',', $select);
        }

        foreach ($select as $val)
        {
            $val = trim($val);

            if ($val != '')
            {
                $this->ar_select[] = $val;
                $this->ar_no_escape[] = $escape;

                if ($this->ar_caching === TRUE)
                {
                    $this->ar_cache_select[] = $val;
                    $this->ar_cache_exists[] = 'select';
                    $this->ar_cache_no_escape[] = $escape;
                }
            }
        }
        return $this;
    }

Coode Software Team