Вход Регистрация
Файл: DESURE-dcms-f12de01ac63e/sys/plugins/classes/tables.class.php
Строк: 82
<?php

/**
 * Работа с таблицами в базе
 */
class tables
{

    public 
$tables = array();
    private 
$db;

    function 
__construct()
    {
        
$this->db DB::me();
        
$tab $this->db->query('SHOW TABLES');
        while (
$table $tab->fetch(PDO::FETCH_BOTH)) {
            
$this->tables[] = $table[0];
        }
    }

    
/**
     * получение sql запроса на создание таблицы
     * @param string $table Имя таблицы
     * @param boolean $auto_increment включать в запрос значение auto increment
     * @return string
     */
    
function get_create($table$auto_increment true)
    {
        
$sql "/* Структура таблицы `$table` */rn";
        
$row $this->db->query("SHOW CREATE TABLE " $this->db->quote($table) . "")->fetch();
        if (!
$auto_increment) {
            
$row[1] = preg_replace('#AUTO_INCREMENT=[0-9]+#ui''/**/'$row[1]);
        }
        return 
$sql $row[1];
    }

    
/**
     * Получение дампа таблицы для вставки
     * @param string $table Имя таблицы
     * @param int $c_ins Максимальное кол-во строк в одном INSERT`е
     * @return string
     */
    
function get_data($table$c_ins 2000)
    {
        
$sql '';
        
$res $this->db->query("SELECT COUNT(*) FROM " $this->db->quote($table) . "");
        
$num_row_all $res->fetchColumn();
        
$start 0;

        if (
$num_row_all) {
            
$sql .= "/* Данные таблицы `$table` */rn";
            
$res $this->db->query("SELECT * FROM " $this->db->quote($table) . " LIMIT 1");
            
$table_keys = @implode("`, `", @array_keys($res->fetch()));
            while (
$start $num_row_all) {
                
$res $this->db->query("SELECT * FROM `$table` LIMIT " $start ", " $c_ins);
                
$res_cnt $this->db->query("SELECT COUNT(*) FROM `$table` LIMIT " $start ", " $c_ins);
                if (
$num_row_all $c_ins)
                    
$sql .= "/* блок записей $start - " . ($start $c_ins) . " */rn";

                
$sql .= "INSERT INTO " $this->db->quote($table) . " (`$table_keys`) VALUES rn";
                
$num_row $res_cnt->fetchColumn();
                
$counter 0;
                while ((
$row $res->fetch())) {
                    
$values = @array_values($row);

                    foreach (
$values as $k => $v) {
                        
$values[$k] = $this->db->quote(preg_replace("#(n|r)+#"'n'$v));
                    }
                    
$values_string = @implode(', '$values);
                    
$counter++;
                    
$sql .= "($values_string)" . ($counter == $num_row ";rn" ", rn");
                }
                
$start $start $c_ins;
            }
        } else
            
$sql .= "/* Таблица `$table` пуста */rn";

        return 
$sql;
    }

    
/**
     * Сохранение запроса на создание таблицы в файл
     * @param string $path путь к сохраняемому файлу
     * @param string $table имя таблицы
     * @param boolean $ai auto_increment
     * @return boolean
     */
    
function save_create($path$table$ai false)
    {
        return @
file_put_contents($path$this->get_create($table$ai));
    }

    
/**
     * Сохранение дампа таблицы в файл
     * @param string $path путь к сохраняемому файлу
     * @param string $table имя таблицы
     * @param int $c_ins Максимальное кол-во строк в одном INSERT`е
     * @return boolean
     */
    
function save_data($path$table$c_ins 2000)
    {
        return @
file_put_contents($path$this->get_data($table$c_ins));
    }

}
Онлайн: 0
Реклама