Заявка в MySQL за промяна на дума с друга

AMOUN

Well-Known Member
Искам да променя в цялата база навсякъде където има xxx.com да стане yyy.com
искам да преместя един сайт на друг домейн
и за да не си играя на ръка да търся и замествам?
Би трябвало да има заявка която да пусна и автоматично да промени думата?
 
От: Заявка в MySQL за промяна на дума с друга

Първо задължително backup на таблицата, че да не се сбози

update TABLE_NAME set FIELD_NAME = replace(FIELD_NAME, ‘find this string’, ‘replace found string with this string’);

п.п. Не съм го пробвал дали работи :)
 
Последно редактирано:
От: Заявка в MySQL за промяна на дума с друга

да ама това е за таблица...
а аз искам на всички таблици да го направя едновременно на цялата база
 
От: Заявка в MySQL за промяна на дума с друга

дай първо един файнд и пусни заявката само на таблиците, където изобщо я има фразата

и м др може да си направиш един бекъп - няма undo
 
От: Заявка в MySQL за промяна на дума с друга

Ето един скрипт, който генерира нужните заявки. Все пак прегледай заявките преди да ги изпълниш и 100% направи бекъп преди това.

PHP:
<?php

    $database = 'test';
    $user = 'user';
    $password = 'pass';
    $host = 'localhost';
    
    $search = 'foo';
    $replace = 'bar';
    
    $conn = mysql_connect($host, $user, $password);
    if (!$conn) {
        die('Unable to connect ' . mysql_error());
    }
    
    if (!mysql_select_db('INFORMATION_SCHEMA', $conn)) {
        die('Cannot use INFORMATION_SCHEMA');
    }
    
    $database_sql = mysql_real_escape_string($database, $conn);
    $query_tables = "select TABLE_NAME from TABLES where TABLE_SCHEMA = '$database_sql'";
    $tables_res = mysql_query($query_tables);
    
    $queries = '';
    $search_sql = mysql_real_escape_string($search, $conn);
    $replace_sql = mysql_real_escape_string($replace, $conn);
    
    while($tables_row = mysql_fetch_assoc($tables_res)) {
        $table_sql = mysql_real_escape_string($tables_row['TABLE_NAME'], $conn);
        
        $query_columns = "select COLUMN_NAME from COLUMNS where TABLE_SCHEMA = '$database_sql' and TABLE_NAME = '$table_sql' and DATA_TYPE in ('varchar', 'text')";
        $columns_res = mysql_query($query_columns);
        $columns = array();
        while ($column_row = mysql_fetch_assoc($columns_res)) {
            $columns[] = $column_row['COLUMN_NAME'];
        }
        
        if (!empty($columns)) {
            $queries .= "update `{$tables_row['TABLE_NAME']}` set ";
            foreach ($columns as $i => $column) {
                if ($i) {
                    $queries .= ", ";
                }
                $queries .= "`$column` = replace(`$column`, '$search_sql', '$replace_sql')";
            }
            $queries .= ";\n";
        }
    }
    
    echo $queries;
    
?>
 
От: Заявка в MySQL за промяна на дума с друга

Ако не ти се занимава със MySQL заявки може и по доста по елементарен друг начин. Сваляш си базата данни на компютъра, отваряш я с notepad или notepad++ и даваш replace all на едната фраза с другата :) След това импорт обратно и си готов. Разбира се най-добре преди това бакъп на базата да не се обози нещо.
 
От: Заявка в MySQL за промяна на дума с друга

Ако не ти се занимава със MySQL заявки може и по доста по елементарен друг начин. Сваляш си базата данни на компютъра, отваряш я с notepad или notepad++ и даваш replace all на едната фраза с другата :) След това импорт обратно и си готов. Разбира се най-добре преди това бакъп на базата да не се обози нещо.

бааааааа
я ти зареди 20 мб база на нотепадник или на едит +

оправих се полуавтоматично с отделни заявки за всяка таблица дева:)
 
От: Заявка в MySQL за промяна на дума с друга

Здравей.
Ако ти трябва да променяш и други неща...

Notepad++ го може, а пък ако ти забива, можеш да използваш http://www.filesplitter.org/, за да разделиш файла. След това ако не работиш на конзола (явно не), задължително ZIP-ни файловете, за да станат под 2 мб (предполагаем лимит за ъплоад), за да можеш да ги импорт-неш в phpMyAdmin.
 

Горе