Backup таблиц MySql в файлы sql и обратно на PHP.
Класс PHP реализация от AI ChatGPT-4
Вопрос к AI ChatGPT:
Нужен PHP MySqli класс который считывает записи из таблицы с кодировкой utf8mb4 и создаёт один или несколько текстовых файлов формата sql с этими данными для обратной записи в таблицу аналог. Максимальное количество записей в файле не должно превышать 10mb. Файлы именуются по названию таблицы и очерёдности записанных данных, помещаются в папку `tmp_baza`.
В функцию создания файла передаётся название исходной таблицы - возвращается отсортированный массив имён созданных файлов, а в функцию записи в таблицу передаётся название пустой таблицы аналога и массив имён файлов созданных первой функцией. Описание и коментирование работы класса.
Нужен PHP MySqli класс который считывает записи из таблицы с кодировкой utf8mb4 и создаёт один или несколько текстовых файлов формата sql с этими данными для обратной записи в таблицу аналог. Максимальное количество записей в файле не должно превышать 10mb. Файлы именуются по названию таблицы и очерёдности записанных данных, помещаются в папку `tmp_baza`.
В функцию создания файла передаётся название исходной таблицы - возвращается отсортированный массив имён созданных файлов, а в функцию записи в таблицу передаётся название пустой таблицы аналога и массив имён файлов созданных первой функцией. Описание и коментирование работы класса.
Ответ от AI ChatGPT:
Предлагаю PHP код для класса, который должен выполнить описанные операции:
PHP
class MysqlExportUtf8mb4 { protected $db; protected $chunkSize = 10485760; // размер чанка - 10 МБ protected $tmpDir = 'tmp_baza/'; public function __construct($hostname, $username, $password, $database) { $this->db = new mysqli($hostname, $username, $password, $database); if ($this->db->connect_error) { die('Connect Error (' . $this->db->connect_errno . ') ' . $this->db->connect_error); } $this->db->set_charset('utf8mb4'); } /** * Функция для создания файлов с данными * * @param string $tableName Название таблицы * * @return array Отсортированный массив имён созданных файлов */ public function createFiles($tableName) { $sql = "SELECT * FROM `$tableName` ORDER BY `id`"; $result = $this->db->query($sql); $totalCount = $result->num_rows; $filesCount = ceil($totalCount / $this->chunkSize); $fileNames = []; for ($i = 0; $i < $filesCount; $i++) { $fileName = $this->tmpDir . $tableName . '_' . ($i + 1) . '.sql'; $file = fopen($fileName, 'w'); if (!$file) { throw new Exception("Не удалось создать файл $fileName"); } for ($j = 0; $j < $this->chunkSize && $row = $result->fetch_assoc(); $j++) { $insert = "INSERT INTO `$tableName` VALUES ("; foreach ($row as $value) { if (is_null($value)) { $insert .= "NULL, "; } else { $insert .= "'" . $this->db->real_escape_string($value) . "', "; } } $insert = rtrim($insert, ', ') . ");\n"; fwrite($file, $insert); } fclose($file); $fileNames[] = $fileName; } return $fileNames; } /** * Функция для записи данных в таблицу * * @param string $tableName Название таблицы * @param array $fileNames Массив с именами файлов */ public function loadData($tableName, $fileNames) { $sql = "LOAD DATA LOCAL INFILE '%s' INTO TABLE `%s` CHARACTER SET utf8mb4 FIELDS TERMINATED BY ',' ENCLOSED BY '\"' ESCAPED BY '\\\\' LINES TERMINATED BY '\\n'"; foreach ($fileNames as $fileName) { $fullFileName = realpath($fileName); $this->db->query(sprintf($sql, $fullFileName, $tableName)); } } }
Пример использования:
PHP
$exporter = new MysqlExportUtf8mb4('localhost', 'username', 'password', 'database'); $fileNames = $exporter->createFiles('my_table'); print_r($fileNames); $exporter->loadData('my_table_new', $fileNames);
В данном примере создается экземпляр класса `MysqlExportUtf8mb4`, который подключается к базе данных с заданными хостом, именем пользователя, паролем и названием базы данных. Затем вызывается метод `createFiles()` для создания файлов с данными и получения массива их имён. После этого вызывается метод `loadData()`, который загружает данные из файлов в новую таблицу.
ТОП 10 случайных публикаций
Сайт разработан студией © WEB-VidST