PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- <?PHP
- /*
- У заказчика имеется база данных, в которой есть таблица с текстами технических документов, вида:
- create table documents
- (
- id int(11) not null auto_increment,
- title varchar(255) not null,
- document_text text not null,
- PRIMARY KEY(id)
- ) CHARACTER SET cp1251;
- Примерный размер базы составляет около 1 000 000 записей.
- Необходимо было убрать из содержимого все html теги и перекодировать в utf-8.
- Для решения этой задачи был составлен скрипт:
- */
- //устанавливаем соединение с базой данных
- $dbh = new PDO('mysql:host=localhost;dbname=test;charset=UTF8', 'root', '');
- //создаем новую таблицу, в которой разместим измененные данные
- $newTableName = 'documents_encoded';
- $newTableSql = <<<EOL
- create table if not exists {$newTableName}
- (
- id int(11) not null auto_increment,
- title varchar(255) not null,
- document_text text not null,
- PRIMARY KEY(id)
- ) CHARACTER SET utf8 COLLATE utf8_general_ci;
- EOL;
- if ($dbh->exec($newTableSql) === false) {
- throw new Exception('Не удалось создать новую таблицу');
- }
- //собираем данные из старой таблицы, обрабатываем и вносим в новую
- $oldTableName = 'documents';
- $selectOldData = "SELECT * FROM {$oldTableName}";
- foreach ($dbh->query($selectOldData) as $row) {
- $insertRowToNewTable = "INSERT INTO `{$newTableName}` SET";
- $insertRowToNewTable .= " `id`='{$row['id']}',";
- $insertRowToNewTable .= " `document_text`='".strip_tags(iconv('CP1251', 'UTF8', $row['document_text']))."'";
- $dbh->exec($insertRowToNewTable);
- }
- /*
- Проанализируйте данный скрипт и предложите изменения по улучшению его работы.
- Улучшения должны быть предоставлены в качестве новой версии данного скрипта.
- */