Извличане на данни от БД с функция [Много сложно]

Radko

Registered
Значи момчета, имам нужда отново от малко помощ. Правя си една футкция, която извлича данни от БД. Използвам ПДО между другото. Направих я да работи, но изкарва резултатите в array, но подредбата на самия array не ми харесва затова искам да го направя по друг начин. Та ето как:

PHP:
    public function get($table, $what = false, $where = false) {
        if(isset($table)) {
        if($what !== false && $where !== false) {
            $ime = explode(',', $what);
            $sth = $this->db->prepare("SELECT $what FROM $table WHERE $where");
            $sth->execute();
            $sth->setFetchMode(PDO::FETCH_ASSOC);
            $i = 0;
            $result = array();
            while($data = $sth->fetch()) {
                $$ime[0]["$i"] = $data[$ime[0]];
                $result[$$ime[0]] =$$ime[0]["$i"];
                $i += 1;
            }

            return $result;
        }
}

Това е само част от кода, по надолу не е нужно защото за момента гледам да го направя правилно докато съм в първия if.

та ето какво пиша

PHP:
$data['query'] = $this->get("users", "username", "id != 3");

Изкарва някакъв низ, ама не е точен. Искам да го направя така, че като задам имена на колони от които да се извлича информация, да се създава низ с името на съответната колона, следователно в този низ да се запишат всички данни от БДто за дадената колона, и след това тези низове да се обединят в един array result който да върна.

Нещо такова искам да се получи

[username] array([0] -> admin, [1] -> pesho, [2] -> gosho) и тн.

В момента не съм направил за всеки въведен елемент от $what да ми прави низ, още дебъгвам само с една клауза в случая username.

В момента ми изкарва нещо от типа на array ([] -> admin);
 
Значи поиграх си малко, сега ми връща почти както трабвя, но с празен низ:
Array ( [username] => Array ( ) ) )

Ето кода

PHP:
    public function get($table, $what = false, $where = false) {
        if(isset($table)) {
        if($what !== false && $where !== false) {
            $ime = $what;
            $$ime = array();
            $sth = $this->db->prepare("SELECT $what FROM $table WHERE $where");
            $sth->execute();
            $sth->setFetchMode(PDO::FETCH_ASSOC);
            $i = 0;
            
            while($data = $sth->fetch()) {
                $$ime["$i"] = $data["$ime"];
                $i += 1;
            }
            return array($ime => $$ime);
        }
 
Ще ти дам моя вариант на тази функция, но е чист mysql. Има да се доизкусурява още, но няма да и ги добавям косурите, защото така или иначе ще си пиша на ново класа.
Давам ти го, пък току виж ти скимне някоя идея за твоята функция

PHP:
public function select($table, array $where_clause, array $where_args, array $needed = array("*"), $where_type = NULL)
    {        
        if(isset($table, $where_clause, $needed))
        {
            if(!in_array("*", $needed) && sizeof($needed) > 1){
                foreach($needed as $value){
                    $needed_i[] = "`{$value}`";
                }
            }
            else{
                $needed_i = ($needed[0] != "*") ? "`{$needed[0]}`" : $needed[0];
            }
            
            foreach($where_clause as $key => $value){
                $where_i[] = "`{$key}` = '{$value}'";
            }
            
            if(isset($where_type) && in_array($where_type, $this->where_operators)){
                $where_i = implode(" " . $where_type . " ", $where_i);
            }
            if(is_array($needed_i) && sizeof($needed_i) > 1){
                $needed_i = implode(", ", $needed_i);
            }
            
            if($result = $this->query($this->process("SELECT {$needed_i} FROM `{$table}` WHERE {$where_i}", $where_args))){
                while($row = mysql_fetch_assoc($result))
                {
                    if(is_array($needed) && sizeof($needed) > 1){
                        foreach($needed as $value){
                            $this->_data[$value] = $row[$value];
                        }
                    }
                    elseif(in_array("*", $needed)){
                        $this->_data = $row;
                     }
                    else{
                        $this->_data[$needed] = $row[$needed];
                    }
                }
                
                return $this->_data;
            }
            
            return;
        }
        
        return;
    }
 
След 1дин час усилено кодиране най - сетне успях да направя каквото исках.

ЕДИТ: Релаксчо сега видях че си писал, прегледах го +1 за труда, пък и видях нещо полезно, което ще ми трябва за вбъдеще.
 

Горе