通常、phpmyadminを使用してMySQLデータベース内のテキストを置き換えるために手動検索を使用します。今はうんざりしていますが、phpmyadminのテーブル全体でテキストを検索して新しいテキストに置き換える方法を教えてください。
例:キーワードdomain.com
を検索し、www.domain.com
に置き換えます。
single table
アップデートの場合
UPDATE `table_name`
SET `field_name` = replace(same_field_name, 'unwanted_text', 'wanted_text')
multiple tables
-から
すべてのテーブルから編集したい場合は、dump
、次にfind/replace
の順に選択してアップロードするのが最善の方法です。
私が見つけた最も簡単な方法は、データベースをテキストファイルにダンプし、sedコマンドを実行して置換し、そしてデータベースをMySQLに再ロードすることです。
Linuxでは、すべてのコマンドはメモリからbashです。
データベースをテキストファイルにダンプする
mysqldump -u user -p databasename > ./db.sql
目的の文字列を検索/置換するにはsedコマンドを実行します
sed -i 's/oldString/newString/g' ./db.sql
データベースをMySQLにリロードします
mysql -u user -p databasename < ./db.sql
簡単です。
これをphpファイルに入れて実行すると、やりたいことができるはずです。
// Connect to your MySQL database.
$hostname = "localhost";
$username = "db_username";
$password = "db_password";
$database = "db_name";
mysql_connect($hostname, $username, $password);
// The find and replace strings.
$find = "find_this_text";
$replace = "replace_with_this_text";
$loop = mysql_query("
SELECT
concat('UPDATE ',table_schema,'.',table_name, ' SET ',column_name, '=replace(',column_name,', ''{$find}'', ''{$replace}'');') AS s
FROM
information_schema.columns
WHERE
table_schema = '{$database}'")
or die ('Cant loop through dbfields: ' . mysql_error());
while ($query = mysql_fetch_assoc($loop))
{
mysql_query($query['s']);
}
PHPmyadminでSQLクエリを実行して、mysite.com/wordpressを検索し、mysite.com/newsで置き換えるなど、すべてのWordpressブログ投稿のテキストを検索および置換します。この例の表はtj_postsです。
UPDATE `tj_posts`
SET `post_content` = replace(post_content, 'mysite.com/wordpress', 'mysite.com/news')
UPDATE table SET field = replace(field, text_needs_to_be_replaced, text_required);
たとえば、Johnのすべての出現箇所をMarkで置き換えたい場合は、以下のようになります。
UPDATE student SET student_name = replace(student_name, 'John', 'Mark');
もう1つの選択肢は、データベース内の各列に対してステートメントを生成することです。
SELECT CONCAT(
'update ', table_name ,
' set ', column_name, ' = replace(', column_name,', ''www.oldDomain.com'', ''www.newDomain.com'');'
) AS statement
FROM information_schema.columns
WHERE table_schema = 'mySchema' AND table_name LIKE 'yourPrefix_%';
これにより、実行できる更新ステートメントのリストが生成されます。
私は「swapnesh」という回答が最善だと思います。残念ながら、私はそれをphpMyAdmin(4.5.0.2)で実行することができませんでしたが、それは論理的ではありませんが(そしていくつかのことを試みましたが)新しいステートメントが見つかったことを意味します。
したがって、私はあなたが同じ問題をexeprienceとPMA以外のデータベースへのアクセスを持っていない場合に便利かもしれない次の解決策を思いつきました…
UPDATE `wp_posts` AS `toUpdate`,
(SELECT `ID`,REPLACE(`guid`,'http://old.tld','http://new.tld') AS `guid`
FROM `wp_posts` WHERE `guid` LIKE 'http://old.tld%') AS `updated`
SET `toUpdate`.`guid`=`updated`.`guid`
WHERE `toUpdate`.`ID`=`updated`.`ID`;
期待される結果をテストするために、あなたは使いたいかもしれません:
SELECT `toUpdate`.`guid` AS `old guid`,`updated`.`guid` AS `new guid`
FROM `wp_posts` AS `toUpdate`,
(SELECT `ID`,REPLACE(`guid`,'http://old.tld','http://new.tld') AS `guid`
FROM `wp_posts` WHERE `guid` LIKE 'http://old.tld%') AS `updated`
WHERE `toUpdate`.`ID`=`updated`.`ID`;
更新するフィールドがいずれもシリアル化されていないという確信がある場合、上記のソリューションはうまく機能します。
ただし、更新が必要なフィールドのいずれかにシリアル化されたデータが含まれている場合、SQLクエリまたはダンプファイルの単純な検索/置換は、置換された文字列の文字数が検索文字列とまったく同じでない限り、シリアル化を中断します。
確かに、「シリアル化された」フィールドは次のようになります。
a:1:{s:13:"administrator";b:1;}
関連データの文字数は、データの一部としてエンコードされます。これは、「オブジェクト」をデータベースに簡単に保存できる形式に簡単に変換する方法です。 方法、理由、さまざまな方法の説明 を使用してオブジェクトデータをシリアル化します。 これは別の説明です 、ただし平易な言葉です。
MySQLにシリアル化されたデータを正しく処理するためのツールが組み込まれていれば驚くでしょうが、そうではありません。
(公平を期すために、前のリンクは、なぜそうするのが理にかなっていないのかを示しています。)
wp-cli
上記の回答の一部は、そのデータの多くをシリアル化するWordPressデータベースに固有のもののようです。 WordPressは、コマンドラインツール wp search-replace を提供し、そのdoesはシリアル化を処理します。
基本的なコマンドは次のとおりです。
wp search-replace 'an-old-string' 'a-new-string' --dry-run
ただし、wordpressは、 guid
を変更しないでください を強調しているため、その列をスキップすることをお勧めします。また、多くの場合、wp_users
テーブルをスキップすることをお勧めします。これは次のようになります。
wp search-replace 'https://old-domain.com' 'https://shiney-new-domain.com' --skip-columns=guid --skip-tables=wp_users --dry-run
注:--dry-run
フラグを追加したので、コピーと貼り付けによって誰かのデータベースが自動的に破損することはありません。スクリプトが目的どおりに動作することを確認したら、そのフラグを付けずに再度実行します。
プラグイン
WordPressを使用している場合、同様の操作を行うためのGUIインターフェイスを提供する無料の商用プラグインも多数あり、多くの追加機能がパッケージ化されています。
Interconnect/it phpスクリプト
Interconnect/itは、WordPressサイトで使用するために作成されたシリアル化されたデータ Safe Search and Replace ツールを処理するphpスクリプトを提供しますが、使用できるように見えますPHPによってシリアル化されたデータベース。 WordPressを含む多くの企業がこのツールを推奨しています。 指示 ここでは、ページの3/4ほど下にあります。
あなたはそれをSQLファイルとしてエクスポートし、ビジュアルスタジオコードのようなエディタでそれを開き、あなたの言葉を見つけて再配置するのが一番です。私は合計が14600ワードである16ワードのために1分で1ギグファイルのSQLに置き換えます。それが最善の方法です。そしてそれを交換した後に保存して再度インポートしてください。インポート用にZipで圧縮することを忘れないでください。
mysql -e "SELECT CONCAT( '更新'、テーブル名、 '設定'、列名、 '=置換('、列名、 '、' www.oldsite.com ''、 '' www.newsite.com ''); ')ASステートメントFROM information_schema.columns WHERE table_name LIKE' wp_% '"-u root -p your_db_name_here> upgrade_script.sql
nano upgrade_script.sql
mysql -u root -p your_db_name_here --force <upgrade_script.sql