Поиск и замена (если нужна) по всей базе
<?php // Ищем... $search = 'www.old-site.ru'; // Например: 'www.old-site.ru' // Меняем на... Используется при $queryType = 'replace' $replace = 'www.new-site.ru'; // Например: 'www.new-site.ru' //Следует иметь ввиду что поиском находятся вхождения без учета регистра, а правятся с цчетом, //поэтому после замены стоит для проверки запустить поиск еще раз // Варианты значения переменной $queryType 'search' (вывод результатов поиска) или 'replace' (поиск с заменой) $queryType = 'search'; // Настройки базы данных $hostname = "mysql-hostname"; $username = "mysql-username"; $password = "mysql-password"; $database = "databasename"; // Показывать ошибки или нет (true/false) $showErrors = true; //показать все колонки, где велся поиск $showAllTableColumns = false; //показать запросы (может быть полезно если понадобится смотреть детально что там за данные) $showQuery = true; //массив таблиц, в которых НЕ требуется поиск $tablesNotChange = array( //'setup_module', //'theme', //'eav_attribute_group', ); $columnTypes = array( 'varchar', 'tinytext', 'text', 'mediumtext', 'longtext', 'char', 'blob', ); if($showErrors) { error_reporting(E_ALL); ini_set('error_reporting', E_ALL); ini_set('display_errors',1); } $mysqli = mysqli_connect($hostname, $username, $password, $database); if ($mysqli->connect_errno) { printf("Can't connect to mysql server\n", $mysqli->connect_error); exit(); } $tables = array(); $resTables = $mysqli->query('SHOW TABLES'); while ($table = $resTables->fetch_assoc()) { $tables[] = $table['Tables_in_'.strtolower($database)]; } $resTables->close(); $rowHeading = ($queryType=='replace') ? 'Replacing \''.$search.'\' with \''.$replace.'\' in \''.$database."'\n\nSTATUS | ROWS AFFECTED | TABLE/FIELD (+ERROR)\n" : 'Searching for \''.$search.'\' in \''.$database."'\n\nSTATUS | ROWS CONTAINING | TABLE/FIELD (+ERROR)\n"; $output = $rowHeading; foreach($tables as $table) { if (in_array($table, $tablesNotChange)) { continue; } $resFields = $mysqli->query('SHOW FIELDS FROM '.$table); foreach($resFields as $fieldData) { $field = $fieldData['Field']; $type = $fieldData['Type']; $numSymb = strpos($type, '('); if ($numSymb !== false) { $type = substr($type, 0, $numSymb); } if (!in_array(strtolower($type), $columnTypes)) { continue; } $handle = $table.'_'.$field; if($queryType=='replace') { $sqlColumn = 'UPDATE '.$table.' SET '.$field.' = REPLACE('.$field.',\''.$search.'\',\''.$replace.'\')'; } else { $sqlColumn = 'SELECT * FROM '.$table.' WHERE '.$field.' LIKE(\'%'.$search.'%\')'; } $result = $mysqli->query( $sqlColumn ); $rowsCount = $mysqli->affected_rows; $error = $mysqli->error; if ($showAllTableColumns || $rowsCount > 0) { $output .= ($result) ? 'OK ' : '-- '; $output .= ($rowsCount>0) ? '<strong>'.$rowsCount.'</strong> ' : '<span style="color:#CCC">'.$rowsCount.'</span> '; $fieldName = '`'.$table.'`.`'.$field.'`'; $output .= $fieldName; $erTab = str_repeat(' ', (60-strlen($fieldName)) ); $output .= ($error) ? $erTab.'(ERROR: '.$error.')' : ''; if ($showQuery) { $output .= ' '.$sqlColumn; } $output .= "\n"; } } $resFields->close(); } echo $output."\n";