0

私はここでこの本当にクールなスクリプトを見つけました:http ://www.brilliantsheep.com/replacing-a-string-in-all-tables-of-a-database-in-mysql/

次のコマンドを使用して影響を受ける行を表示するようにスクリプトを変更しようとしましたmysql_affected_rows() == 1UPDATEこれは、更新が実行されたかどうかをテストする正しい方法ですか?

<?php

    // Setup the associative array for replacing the old string with new string
    $replace_array = array(
        'test' => 'foo'
    );

    $mysql_link = mysql_connect( 'localhost', 'root', 'password' );
    if( ! $mysql_link) {
        die( 'Could not connect: ' . mysql_error() );
    }

    $mysql_db = mysql_select_db( 'database', $mysql_link );
    if(! $mysql_db ) {
        die( 'Can\'t select database: ' . mysql_error() );
    }

    // Traverse all tables
    $tables_query = 'SHOW TABLES';
    $tables_result = mysql_query( $tables_query );
    $results = array();
    while( $tables_rows = mysql_fetch_row( $tables_result ) ) {
        foreach( $tables_rows as $table ) {

            // Traverse all columns
            $columns_query = 'SHOW COLUMNS FROM ' . $table;
            $columns_result = mysql_query( $columns_query );
            while( $columns_row = mysql_fetch_assoc( $columns_result ) ) {

                $column = $columns_row['Field'];
                $type = $columns_row['Type'];

                // Process only text-based columns
                if( strpos( $type, 'char' ) !== false || strpos( $type, 'text' ) !== false ) {
                    // Process all replacements for the specific column
                    foreach( $replace_array as $old_string => $new_string ) {
                        $replace_query = 'UPDATE ' . $table .
                            ' SET ' .  $column . ' = REPLACE(' . $column .
                            ', \'' . $old_string . '\', \'' . $new_string . '\')';
                        mysql_query( $replace_query );
                        if(mysql_affected_rows() == 1){
                            $results[] = $replace_query;
                        }
                    }
                }
            }
        }
    }

    mysql_free_result( $columns_result );
    mysql_free_result( $tables_result );
    mysql_close( $mysql_link );

    echo 'Rows affected!';

    echo '<ul>';
    foreach($results as $i){
        echo '<li>' . $i . '</li>';
    }
    echo '</ul>';

?>
4

2 に答える 2

1

mysql_affected_rows()影響を受ける行数が返されるため、おそらく。> 0ではなく検索する必要があり== 1ます。私はこのスクリプトに本当に注意を払うでしょう、それはあなたがそれを望まない何かをすることはほとんど必然的になるでしょう。

于 2012-08-25T11:59:45.223 に答える
0

Tieranが言ったことに加えてUPDATE、もっと簡単な方法で 行うこともできます

$replace_query = 'UPDATE ' . $table .
                 ' SET ' .  $column . " = '$new_string'" ;
于 2012-08-25T12:23:58.130 に答える