mysqli DESCRIBE возвращает только одну строку - PullRequest
2 голосов
/ 04 апреля 2011

Состав:

CREATE TABLE `links` (
 `id` int(11) NOT NULL auto_increment,
 `title` int(11) default NULL,
 `url` varchar(200) NOT NULL,
 `seourl` varchar(150) default NULL,
 `linkset` varchar(50) NOT NULL default 'main',
 PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

У меня здесь странная проблема, запрос DESCRIBE links возвращает только первую строку (id).

// my query...
$data = $db->query('DESCRIBE `links`')->fetch();

// query function
public function query($sql, $id = false){
    $this->query_id = mysqli_query($this->connection, $sql);
    if(!$this->query_id){
        psyo::error("Error while executing query (sql: {$sql}).");
        return NULL;
    }else{
        $this->result = mysqli_store_result($this->connection);
        $this->affected = mysqli_affected_rows($this->connection);
        return $id ? $this->query_id : $this;
    }
}

// fetch function
public function fetch($query_id = NULL){
    if($query_id)
        $this->query_id = $query_id;
    if($this->query_id){
        $data = mysqli_fetch_assoc($this->query_id);
    }else{
        psyo::error("Error while fetching results (query id: {$this->query_id}).");
    }
    $this->free();
    return $data;
}

// connection set by
public function connect(){
    $this->connection = mysqli_connect($this->server, $this->username, $this->password, $this->database);
    if(!$this->connection){
        psyo::error("Error connecting to server or while selecting database (database: {$this->database}).");
    }
}

Так что это мои функции, взятые из класса (спросите, если нужно больше ...), и да, выполненный запрос возвращает только первую строку, но $this->affected возвращает правильное значение 5 в этом случае.

Возвращает ожидаемый результат при выполнении запроса в phpMyAdmin.

В чем может быть проблема?

Заранее спасибо!

1 Ответ

1 голос
/ 04 апреля 2011

Ах, сам выяснил проблему, похоже, моя fetch() функция вернула только первый ряд. Немного поменял и все работает:

public function fetch($all = false, $query_id = NULL){
    if($query_id)
        $this->query_id = $query_id;
    if($this->query_id){
        if($all){
            while($row = mysqli_fetch_assoc($this->query_id)){
                $data[] = $row;
            }
        }else{
            $data = mysqli_fetch_assoc($this->query_id);
        }
    }else{
        psyo::error("Error while fetching results (query id: {$this->query_id}).");
    }
    $this->free();
    return $data;
}

Будь прокляты эти безрассудные ошибки ...

...