MySQL数据库中的扩展搜索和替换

时间:2012-03-28 17:09:37

标签: mysql

有没有办法在数据库中搜索自定义字符串并将其替换为新字符串? 我正在搜索的字符串可以出现在不同的表中,有时可以出现在同一个表的不同列中,所以基本上我要做的就是在任何地方搜索和替换。

2 个答案:

答案 0 :(得分:1)

您需要一个类似的查询:

UPDATE [table_name] 
SET [field_name] = 
REPLACE([field_name],'[string_to_find]','[string_to_replace]');

对数据库中的每个相关表和/或字段重复。

答案 1 :(得分:0)

以下是PHP的解决方案:

<?php

// edit this line to add old and new terms which you want to be replaced
$search_replace = array( 'old_term' => 'new_term', 'old_term2' => 'new_term2' );

//change the localhost,username,password and database-name according to your db
mysql_connect("localhost", "username", "password") or die(mysql_error());
mysql_select_db("database-name") or die(mysql_error());

$show_tables = mysql_query( 'SHOW TABLES' );
while( $st_rows = mysql_fetch_row( $show_tables ) ) {
    foreach( $st_rows as $cur_table ) {
        $show_columns = mysql_query( 'SHOW COLUMNS FROM ' . $cur_table );
        while( $cc_row = mysql_fetch_assoc( $show_columns ) ) {
            $column = $cc_row['Field'];
            $type = $cc_row['Type'];
            if( strpos( $type, 'char' ) !== false || strpos( $type, 'text' ) !== false ) {
                foreach( $search_replace as $old_string => $new_string ) {
                    $replace_query = 'UPDATE ' . $cur_table .
                        ' SET ' .  $column . ' = REPLACE(' . $column .
                        ', \'' . $old_string . '\', \'' . $new_string . '\')';
                    mysql_query( $replace_query );
                }
            }
        }
    }
}
echo 'replaced';
mysql_free_result( $show_columns );
mysql_free_result( $show_tables );
mysql_close( $mysql_link );

?>

Source