Ответов: 4 Просмотров: 767
|
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 .= " `title`='".strip_tags(iconv('CP1251', 'UTF8', $row['title']))."',"; $insertRowToNewTable .= " `document_text`='".strip_tags(iconv('CP1251', 'UTF8', $row['document_text']))."'"; $dbh->exec($insertRowToNewTable); } /* Проанализируйте данный скрипт и предложите изменения по улучшению его работы. Улучшения должны быть предоставлены в качестве новой версии данного скрипта. */
|