function getAll(){
$sql = $this->db->query("SELECT * FROM `user`");
return $sql->result();
}
и хоп. и у нас есть массив со всеми полями...
Дело в том, что метод result() в PDO - не определен...
Стало интересно, как они его туда добавили... дабы приблизится к их действиям сделал так
function getAll(){
$sql = $this->db->query("SELECT * FROM `user`");
return $this->db->selectAll($sql);
}
А метод selectAll находится в файле подключения к БД, и выглядит тривиально
public function selectAll($sql){
while($res = $sql->fetch(PDO::FETCH_ASSOC)){
$data[] = $res;
}
return $data;
}
Может кто подскажет более просто решение. Вроде как-то можно добавить методы в стандартный/встроенный класс PDO...
И еще, вспомнилось... может тут помогут волшебные методы?
Спустя 1 час, 16 минут, 26 секунд (16.03.2012 - 20:02) T1grOK написал(а):
Цитата (m4a1fox @ 16.03.2012 - 15:45) |
и хоп. и у нас есть массив со всеми полями... Дело в том, что метод result() в PDO - не определен... Стало интересно, как они его туда добавили... |
Внимательно смотрим в классы.
Файл инициализации DB подключаются и создаются нужные объекты
eval('class CI_DB extends CI_DB_driver { }');
Смотрим дальше
require_once(BASEPATH.'database/drivers/'.$params['dbdriver'].'/'.$params['dbdriver'].'_driver'.EXT);
// Instantiate the DB adapter
$driver = 'CI_DB_'.$params['dbdriver'].'_driver';
$DB =& instantiate_class(new $driver($params));
Создается экземпляр класса драйвера.
Ищем драйвер скажем Mysql
class CI_DB_mysql_driver extends CI_DB {
Драйвер наследует CI_DB, a CI_DB наследует CI_DB_driver.
Идем в CI_DB_driver. Опа находим метод
function load_rdriver()
{
$driver = 'CI_DB_'.$this->dbdriver.'_result';
if ( ! class_exists($driver))
{
include_once(BASEPATH.'database/DB_result'.EXT);
include_once(BASEPATH.'database/drivers/'.$this->dbdriver.'/'.$this->dbdriver.'_result'.EXT);
}
return $driver;
}
Подключаются и далее используется DB_result. Идем в DB_result и видим наш метод result().
function result($type = 'object')
{
return ($type == 'object') ? $this->result_object() : $this->result_array();
}
Смотрим метод result_array()
function result_array()
{
if (count($this->result_array) > 0)
{
return $this->result_array;
}
// In the event that query caching is on the result_id variable
// will return FALSE since there isn't a valid SQL resource so
// we'll simply return an empty array.
if ($this->result_id === FALSE OR $this->num_rows() == 0)
{
return array();
}
$this->_data_seek(0);
while ($row = $this->_fetch_assoc())
{
$this->result_array[] = $row;
}
return $this->result_array;
}
Может что то упустил. Но суть одна, ничего нигде не появляется.
Спустя 1 час, 45 минут, 54 секунды (16.03.2012 - 21:47) m4a1fox написал(а):
T1grOK
ВОт оно че Михалыч...
ВОт оно че Михалыч...