コード例 #1
0
ファイル: orm.func.php プロジェクト: ramainen/doit-cms
 function fetch_data_now()
 {
     $this->_options['queryready'] = true;
     /*
     $result = doitClass::$instance->db->query($this->to_sql());
     if(!$result){
     	print $this->to_sql();
     }else{
     	$this->_data =  $result->fetchAll(PDO::FETCH_ASSOC);
     	$this->_count = count($this->_data);
     }
     */
     $_sql = $this->to_sql();
     if (!$this->_options['calc_rows'] && isset(ActiveRecord::$_queries_cache[$_sql])) {
         $this->_data = ActiveRecord::$_queries_cache[$_sql];
     } else {
         $db_result = doitClass::$instance->db->query($_sql);
         if (d()->db->errorCode() == '42S22') {
             $db_err = d()->db->errorInfo();
             if ($db_err[1] == '1054') {
                 $_column_name = array();
                 if (preg_match_all("/Unknown\\scolumn\\s\\'(.*?)\\'/", $db_err[2], $_column_name) == 1) {
                     $_column_name = $_column_name[1][0];
                     if ($_column_name == 'sort') {
                         $scaffolder = new Scaffold();
                         $scaffolder->create_field($this->_options['table'], 'sort');
                         $db_result = doitClass::$instance->db->query($_sql);
                     }
                 }
             }
         }
         if (d()->db->errorCode() == '42S02' || d()->db->errorCode() == '42S22') {
             d()->bad_table = $this->_options['table'];
         }
         if (d()->db->errorCode() == 'HY000') {
             if (DB_TYPE == 'mysql') {
                 doitClass::$instance->db = new PDO(DB_TYPE . ':host=' . DB_HOST . ';dbname=' . DB_NAME, DB_USER, DB_PASSWORD);
                 doitClass::$instance->db->exec('SET CHARACTER SET utf8');
                 doitClass::$instance->db->exec('SET NAMES utf8');
             } else {
                 doitClass::$instance->db = new PDO(DB_TYPE . ':host=' . DB_HOST . ';dbname=' . DB_NAME, DB_USER, DB_PASSWORD);
             }
             $db_result = doitClass::$instance->db->query($_sql);
         }
         if (d()->db->errorCode() == 'HY000') {
             print 'Mysql недоступен. Попытка переподключения не удалась. ';
         }
         /*
         if(!is_object($db_result)){
         	if (iam()){
         		print 'Неизвестная ошибка базы данных. Запрос, который не удалось выполнить: ' . h($_sql) . '<br> Код ошибки: ';
         	}else{
         		print 'Неизвестная ошибка базы данных. Запрос, который не удалось выполнить, можно узнать только под аккаунтом разработчика.<br> Код ошибки: ';
         	}
         	
         	print d()->db->errorCode().'<br> Данные ошибки: ';
         	var_dump(d()->db->errorInfo());
         	die('<br>Это всё, что мы знаем.');
         }
         */
         $this->_data = $db_result->fetchAll(PDO::FETCH_ASSOC);
         if ($db_result !== false) {
             ActiveRecord::$_queries_cache[$_sql] = $this->_data;
         }
     }
     $this->_count = count($this->_data);
     if ($this->_count > 0) {
         if (!isset(doitClass::$instance->datapool['columns_registry'])) {
             doitClass::$instance->datapool['columns_registry'] = array();
             doitClass::$instance->datapool['_known_fields'] = array();
         }
         if (!isset(doitClass::$instance->datapool['columns_registry'][$this->_options['table']])) {
             doitClass::$instance->datapool['_known_fields'][$this->_options['table']] = array_keys($this->_data[0]);
             doitClass::$instance->datapool['columns_registry'][$this->_options['table']] = array_keys($this->_data[0]);
         }
     }
     if ($this->_options['calc_rows']) {
         $_countrows_line = doitClass::$instance->db->query('SELECT FOUND_ROWS()')->fetch();
         $this->_count_rows = $_countrows_line[0];
     }
 }