Find and Replace text in the entire table using a MySQL query
Usually I use manual find to replace text in a MySQL database using phpmyadmin. I'm tired of it now, how can I run a query to find and replace a text with new text in the entire table in phpmyadmin?
Example: find keyword domain.com
, replace with www.domain.com
.
mysql phpmyadmin
add a comment |
Usually I use manual find to replace text in a MySQL database using phpmyadmin. I'm tired of it now, how can I run a query to find and replace a text with new text in the entire table in phpmyadmin?
Example: find keyword domain.com
, replace with www.domain.com
.
mysql phpmyadmin
Possible duplicate of stackoverflow.com/questions/639531/…
– sel
Aug 7 '12 at 4:05
1
You can do some thing like [this][1]. [1]: stackoverflow.com/questions/562457/…
– Pramod
Apr 16 '13 at 6:50
1
This will help you achieve what you need.
– Dom
Aug 25 '14 at 20:07
Possible duplicate of MySQL string replace
– Steve Chambers
Aug 2 '16 at 14:02
add a comment |
Usually I use manual find to replace text in a MySQL database using phpmyadmin. I'm tired of it now, how can I run a query to find and replace a text with new text in the entire table in phpmyadmin?
Example: find keyword domain.com
, replace with www.domain.com
.
mysql phpmyadmin
Usually I use manual find to replace text in a MySQL database using phpmyadmin. I'm tired of it now, how can I run a query to find and replace a text with new text in the entire table in phpmyadmin?
Example: find keyword domain.com
, replace with www.domain.com
.
mysql phpmyadmin
mysql phpmyadmin
edited Nov 22 '16 at 14:41
guaka
10.2k74481
10.2k74481
asked Aug 7 '12 at 3:59
alyasabrina
1,037287
1,037287
Possible duplicate of stackoverflow.com/questions/639531/…
– sel
Aug 7 '12 at 4:05
1
You can do some thing like [this][1]. [1]: stackoverflow.com/questions/562457/…
– Pramod
Apr 16 '13 at 6:50
1
This will help you achieve what you need.
– Dom
Aug 25 '14 at 20:07
Possible duplicate of MySQL string replace
– Steve Chambers
Aug 2 '16 at 14:02
add a comment |
Possible duplicate of stackoverflow.com/questions/639531/…
– sel
Aug 7 '12 at 4:05
1
You can do some thing like [this][1]. [1]: stackoverflow.com/questions/562457/…
– Pramod
Apr 16 '13 at 6:50
1
This will help you achieve what you need.
– Dom
Aug 25 '14 at 20:07
Possible duplicate of MySQL string replace
– Steve Chambers
Aug 2 '16 at 14:02
Possible duplicate of stackoverflow.com/questions/639531/…
– sel
Aug 7 '12 at 4:05
Possible duplicate of stackoverflow.com/questions/639531/…
– sel
Aug 7 '12 at 4:05
1
1
You can do some thing like [this][1]. [1]: stackoverflow.com/questions/562457/…
– Pramod
Apr 16 '13 at 6:50
You can do some thing like [this][1]. [1]: stackoverflow.com/questions/562457/…
– Pramod
Apr 16 '13 at 6:50
1
1
This will help you achieve what you need.
– Dom
Aug 25 '14 at 20:07
This will help you achieve what you need.
– Dom
Aug 25 '14 at 20:07
Possible duplicate of MySQL string replace
– Steve Chambers
Aug 2 '16 at 14:02
Possible duplicate of MySQL string replace
– Steve Chambers
Aug 2 '16 at 14:02
add a comment |
9 Answers
9
active
oldest
votes
For a single table
update
UPDATE `table_name`
SET `field_name` = replace(same_field_name, 'unwanted_text', 'wanted_text')
From multiple tables
-
If you want to edit from all tables, best way is to take the dump
and then find/replace
and upload it back.
3
Does this replace an entire field, or with it do a substring match within a field?
– Randy Greencorn
Nov 14 '13 at 21:09
2
It will replace a substring within the field @RandyGreencorn . It's also case-sensitive.
– Andrew
Aug 15 '16 at 20:34
7
and it will replace 'domain.com' with 'www.domain.com' and 'www.domain.com' with 'www.www.domain.com'
– michelek
Dec 16 '16 at 0:59
2
More on this:If you want to edit from all tables, best way is to take the dump and then find/replace and upload it back.
Use sed on the dump for the find/replace:sed "s:unwanted_text:wanted_text:g" dump.sql
– kakoma
Sep 2 '17 at 13:01
1
Works great. As others have stated, sometimes I have to mess with the quotes to get it to work in phpMyAdmin. I used it to replace only the text "http:" with "https:" in a column containing full web addresses. The rest of the web addresses were untouched.
– Heres2u
Mar 20 at 14:34
|
show 2 more comments
The easiest way I have found is to dump the database to a text file, run a sed command to do the replace, and reload the database back into MySQL.
All commands are bash on Linux, from memory.
Dump database to text file
mysqldump -u user -p databasename > ./db.sql
Run sed command to find/replace target string
sed -i 's/oldString/newString/g' ./db.sql
Reload the database into MySQL
mysql -u user -p databasename < ./db.sql
Easy peasy.
1
This works amazingly fast. I love this solution. I had to do some url replacements and instead of using slashes as my delimiters I used pipes instead (read this up grymoire.com/Unix/Sed.html). Example: sed -i 's|olddomain.com|http://newdomain.com|g' ./db.sql
– Mike Kormendy
Feb 9 '15 at 4:49
1
It was so fast i thought it didn't work. But it did! Also, you can just escape slashes like this://domain.com
– m.cichacz
Aug 25 '16 at 8:52
1
Just a reminder that in OS X, thesed -i
command may throw outunterminated substitute pattern
error. You can usesed -i '' -e 's/oldString/newString/g' ./db.sql
instead.
– afterglowlee
Jan 31 '17 at 22:05
1
this one suits my need, thank you!
– budiantoip
Aug 1 '17 at 5:01
add a comment |
Put this in a php file and run it and it should do what you want it to do.
// 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']);
add a comment |
Running an SQL query in PHPmyadmin to find and replace text in all wordpress blog posts, such as finding mysite.com/wordpress and replacing that with mysite.com/news
Table in this example is tj_posts
UPDATE `tj_posts`
SET `post_content` = replace(post_content, 'mysite.com/wordpress', 'mysite.com/news')
Thanks for the query. For my WordPress site the column name iswp_posts
so the query looksUPDATE `wp_posts` SET `post_content` = replace(post_content, 'mysite.com/wordpress', 'mysite.com/news')
– Maris B.
Jul 25 at 12:39
add a comment |
UPDATE table SET field = replace(field, text_needs_to_be_replaced, text_required);
Like for example, if I want to replace all occurrences of John by Mark I will use below,
UPDATE student SET student_name = replace(student_name, 'John', 'Mark');
add a comment |
Another option is to generate the statements for each column in the database:
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_%';
This should generate a list of update statements that you can then execute.
2
Slower than dumping, but for people that don't feel comfortable with the command line, this answer is creative and effective.
– Stephane
Aug 14 '16 at 13:36
2
This is by far the best approach, if you have a lot of data and cannot dump/reload it.
– Kariem
Mar 20 '17 at 8:57
Oh man this worked great! I will share my scripts based on this idea
– Andy
Nov 3 '17 at 17:40
add a comment |
I believe "swapnesh" answer to be the best ! Unfortunately I couldn't execute it in phpMyAdmin (4.5.0.2) who although illogical (and tried several things) it kept saying that a new statement was found and that no delimiter was found…
Thus I came with the following solution that might be usefull if you exeprience the same issue and have no other access to the database than 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`;
To test the expected result you may want to use :
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`;
add a comment |
Generate change SQL queries (FAST)
mysql -e "SELECT CONCAT( 'update ', table_name , ' set ', column_name, ' = replace(', column_name,', ''www.oldsite.com'', ''www.newsite.com'');' ) AS statement FROM information_schema.columns WHERE table_name LIKE 'wp_%'" -u root -p your_db_name_here > upgrade_script.sql
Remove any garbage at the start of the file. I had some.
nano upgrade_script.sql
Run generated script with --force options to skip errors. (SLOW - grab a coffee if big DB)
mysql -u root -p your_db_name_here --force < upgrade_script.sql
add a comment |
the best you export it as sql file and open it with editor such as visual studio code and find and repalace your words.
i replace in 1 gig file sql in 1 minutes for 16 word that total is 14600 word.
its the best way.
and after replace it save and import it again.
do not forget compress it with zip for import.
add a comment |
protected by Community♦ May 29 '14 at 19:25
Thank you for your interest in this question.
Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).
Would you like to answer one of these unanswered questions instead?
9 Answers
9
active
oldest
votes
9 Answers
9
active
oldest
votes
active
oldest
votes
active
oldest
votes
For a single table
update
UPDATE `table_name`
SET `field_name` = replace(same_field_name, 'unwanted_text', 'wanted_text')
From multiple tables
-
If you want to edit from all tables, best way is to take the dump
and then find/replace
and upload it back.
3
Does this replace an entire field, or with it do a substring match within a field?
– Randy Greencorn
Nov 14 '13 at 21:09
2
It will replace a substring within the field @RandyGreencorn . It's also case-sensitive.
– Andrew
Aug 15 '16 at 20:34
7
and it will replace 'domain.com' with 'www.domain.com' and 'www.domain.com' with 'www.www.domain.com'
– michelek
Dec 16 '16 at 0:59
2
More on this:If you want to edit from all tables, best way is to take the dump and then find/replace and upload it back.
Use sed on the dump for the find/replace:sed "s:unwanted_text:wanted_text:g" dump.sql
– kakoma
Sep 2 '17 at 13:01
1
Works great. As others have stated, sometimes I have to mess with the quotes to get it to work in phpMyAdmin. I used it to replace only the text "http:" with "https:" in a column containing full web addresses. The rest of the web addresses were untouched.
– Heres2u
Mar 20 at 14:34
|
show 2 more comments
For a single table
update
UPDATE `table_name`
SET `field_name` = replace(same_field_name, 'unwanted_text', 'wanted_text')
From multiple tables
-
If you want to edit from all tables, best way is to take the dump
and then find/replace
and upload it back.
3
Does this replace an entire field, or with it do a substring match within a field?
– Randy Greencorn
Nov 14 '13 at 21:09
2
It will replace a substring within the field @RandyGreencorn . It's also case-sensitive.
– Andrew
Aug 15 '16 at 20:34
7
and it will replace 'domain.com' with 'www.domain.com' and 'www.domain.com' with 'www.www.domain.com'
– michelek
Dec 16 '16 at 0:59
2
More on this:If you want to edit from all tables, best way is to take the dump and then find/replace and upload it back.
Use sed on the dump for the find/replace:sed "s:unwanted_text:wanted_text:g" dump.sql
– kakoma
Sep 2 '17 at 13:01
1
Works great. As others have stated, sometimes I have to mess with the quotes to get it to work in phpMyAdmin. I used it to replace only the text "http:" with "https:" in a column containing full web addresses. The rest of the web addresses were untouched.
– Heres2u
Mar 20 at 14:34
|
show 2 more comments
For a single table
update
UPDATE `table_name`
SET `field_name` = replace(same_field_name, 'unwanted_text', 'wanted_text')
From multiple tables
-
If you want to edit from all tables, best way is to take the dump
and then find/replace
and upload it back.
For a single table
update
UPDATE `table_name`
SET `field_name` = replace(same_field_name, 'unwanted_text', 'wanted_text')
From multiple tables
-
If you want to edit from all tables, best way is to take the dump
and then find/replace
and upload it back.
edited Aug 7 '12 at 4:45
answered Aug 7 '12 at 4:06
swapnesh
17.7k2173108
17.7k2173108
3
Does this replace an entire field, or with it do a substring match within a field?
– Randy Greencorn
Nov 14 '13 at 21:09
2
It will replace a substring within the field @RandyGreencorn . It's also case-sensitive.
– Andrew
Aug 15 '16 at 20:34
7
and it will replace 'domain.com' with 'www.domain.com' and 'www.domain.com' with 'www.www.domain.com'
– michelek
Dec 16 '16 at 0:59
2
More on this:If you want to edit from all tables, best way is to take the dump and then find/replace and upload it back.
Use sed on the dump for the find/replace:sed "s:unwanted_text:wanted_text:g" dump.sql
– kakoma
Sep 2 '17 at 13:01
1
Works great. As others have stated, sometimes I have to mess with the quotes to get it to work in phpMyAdmin. I used it to replace only the text "http:" with "https:" in a column containing full web addresses. The rest of the web addresses were untouched.
– Heres2u
Mar 20 at 14:34
|
show 2 more comments
3
Does this replace an entire field, or with it do a substring match within a field?
– Randy Greencorn
Nov 14 '13 at 21:09
2
It will replace a substring within the field @RandyGreencorn . It's also case-sensitive.
– Andrew
Aug 15 '16 at 20:34
7
and it will replace 'domain.com' with 'www.domain.com' and 'www.domain.com' with 'www.www.domain.com'
– michelek
Dec 16 '16 at 0:59
2
More on this:If you want to edit from all tables, best way is to take the dump and then find/replace and upload it back.
Use sed on the dump for the find/replace:sed "s:unwanted_text:wanted_text:g" dump.sql
– kakoma
Sep 2 '17 at 13:01
1
Works great. As others have stated, sometimes I have to mess with the quotes to get it to work in phpMyAdmin. I used it to replace only the text "http:" with "https:" in a column containing full web addresses. The rest of the web addresses were untouched.
– Heres2u
Mar 20 at 14:34
3
3
Does this replace an entire field, or with it do a substring match within a field?
– Randy Greencorn
Nov 14 '13 at 21:09
Does this replace an entire field, or with it do a substring match within a field?
– Randy Greencorn
Nov 14 '13 at 21:09
2
2
It will replace a substring within the field @RandyGreencorn . It's also case-sensitive.
– Andrew
Aug 15 '16 at 20:34
It will replace a substring within the field @RandyGreencorn . It's also case-sensitive.
– Andrew
Aug 15 '16 at 20:34
7
7
and it will replace 'domain.com' with 'www.domain.com' and 'www.domain.com' with 'www.www.domain.com'
– michelek
Dec 16 '16 at 0:59
and it will replace 'domain.com' with 'www.domain.com' and 'www.domain.com' with 'www.www.domain.com'
– michelek
Dec 16 '16 at 0:59
2
2
If you want to edit from all tables, best way is to take the dump and then find/replace and upload it back.
Use sed on the dump for the find/replace: sed "s:unwanted_text:wanted_text:g" dump.sql
– kakoma
Sep 2 '17 at 13:01
If you want to edit from all tables, best way is to take the dump and then find/replace and upload it back.
Use sed on the dump for the find/replace: sed "s:unwanted_text:wanted_text:g" dump.sql
– kakoma
Sep 2 '17 at 13:01
1
1
Works great. As others have stated, sometimes I have to mess with the quotes to get it to work in phpMyAdmin. I used it to replace only the text "http:" with "https:" in a column containing full web addresses. The rest of the web addresses were untouched.
– Heres2u
Mar 20 at 14:34
Works great. As others have stated, sometimes I have to mess with the quotes to get it to work in phpMyAdmin. I used it to replace only the text "http:" with "https:" in a column containing full web addresses. The rest of the web addresses were untouched.
– Heres2u
Mar 20 at 14:34
|
show 2 more comments
The easiest way I have found is to dump the database to a text file, run a sed command to do the replace, and reload the database back into MySQL.
All commands are bash on Linux, from memory.
Dump database to text file
mysqldump -u user -p databasename > ./db.sql
Run sed command to find/replace target string
sed -i 's/oldString/newString/g' ./db.sql
Reload the database into MySQL
mysql -u user -p databasename < ./db.sql
Easy peasy.
1
This works amazingly fast. I love this solution. I had to do some url replacements and instead of using slashes as my delimiters I used pipes instead (read this up grymoire.com/Unix/Sed.html). Example: sed -i 's|olddomain.com|http://newdomain.com|g' ./db.sql
– Mike Kormendy
Feb 9 '15 at 4:49
1
It was so fast i thought it didn't work. But it did! Also, you can just escape slashes like this://domain.com
– m.cichacz
Aug 25 '16 at 8:52
1
Just a reminder that in OS X, thesed -i
command may throw outunterminated substitute pattern
error. You can usesed -i '' -e 's/oldString/newString/g' ./db.sql
instead.
– afterglowlee
Jan 31 '17 at 22:05
1
this one suits my need, thank you!
– budiantoip
Aug 1 '17 at 5:01
add a comment |
The easiest way I have found is to dump the database to a text file, run a sed command to do the replace, and reload the database back into MySQL.
All commands are bash on Linux, from memory.
Dump database to text file
mysqldump -u user -p databasename > ./db.sql
Run sed command to find/replace target string
sed -i 's/oldString/newString/g' ./db.sql
Reload the database into MySQL
mysql -u user -p databasename < ./db.sql
Easy peasy.
1
This works amazingly fast. I love this solution. I had to do some url replacements and instead of using slashes as my delimiters I used pipes instead (read this up grymoire.com/Unix/Sed.html). Example: sed -i 's|olddomain.com|http://newdomain.com|g' ./db.sql
– Mike Kormendy
Feb 9 '15 at 4:49
1
It was so fast i thought it didn't work. But it did! Also, you can just escape slashes like this://domain.com
– m.cichacz
Aug 25 '16 at 8:52
1
Just a reminder that in OS X, thesed -i
command may throw outunterminated substitute pattern
error. You can usesed -i '' -e 's/oldString/newString/g' ./db.sql
instead.
– afterglowlee
Jan 31 '17 at 22:05
1
this one suits my need, thank you!
– budiantoip
Aug 1 '17 at 5:01
add a comment |
The easiest way I have found is to dump the database to a text file, run a sed command to do the replace, and reload the database back into MySQL.
All commands are bash on Linux, from memory.
Dump database to text file
mysqldump -u user -p databasename > ./db.sql
Run sed command to find/replace target string
sed -i 's/oldString/newString/g' ./db.sql
Reload the database into MySQL
mysql -u user -p databasename < ./db.sql
Easy peasy.
The easiest way I have found is to dump the database to a text file, run a sed command to do the replace, and reload the database back into MySQL.
All commands are bash on Linux, from memory.
Dump database to text file
mysqldump -u user -p databasename > ./db.sql
Run sed command to find/replace target string
sed -i 's/oldString/newString/g' ./db.sql
Reload the database into MySQL
mysql -u user -p databasename < ./db.sql
Easy peasy.
edited Jan 19 '15 at 2:10
answered Jan 19 '15 at 1:55
siliconrockstar
2,2462831
2,2462831
1
This works amazingly fast. I love this solution. I had to do some url replacements and instead of using slashes as my delimiters I used pipes instead (read this up grymoire.com/Unix/Sed.html). Example: sed -i 's|olddomain.com|http://newdomain.com|g' ./db.sql
– Mike Kormendy
Feb 9 '15 at 4:49
1
It was so fast i thought it didn't work. But it did! Also, you can just escape slashes like this://domain.com
– m.cichacz
Aug 25 '16 at 8:52
1
Just a reminder that in OS X, thesed -i
command may throw outunterminated substitute pattern
error. You can usesed -i '' -e 's/oldString/newString/g' ./db.sql
instead.
– afterglowlee
Jan 31 '17 at 22:05
1
this one suits my need, thank you!
– budiantoip
Aug 1 '17 at 5:01
add a comment |
1
This works amazingly fast. I love this solution. I had to do some url replacements and instead of using slashes as my delimiters I used pipes instead (read this up grymoire.com/Unix/Sed.html). Example: sed -i 's|olddomain.com|http://newdomain.com|g' ./db.sql
– Mike Kormendy
Feb 9 '15 at 4:49
1
It was so fast i thought it didn't work. But it did! Also, you can just escape slashes like this://domain.com
– m.cichacz
Aug 25 '16 at 8:52
1
Just a reminder that in OS X, thesed -i
command may throw outunterminated substitute pattern
error. You can usesed -i '' -e 's/oldString/newString/g' ./db.sql
instead.
– afterglowlee
Jan 31 '17 at 22:05
1
this one suits my need, thank you!
– budiantoip
Aug 1 '17 at 5:01
1
1
This works amazingly fast. I love this solution. I had to do some url replacements and instead of using slashes as my delimiters I used pipes instead (read this up grymoire.com/Unix/Sed.html). Example: sed -i 's|olddomain.com|http://newdomain.com|g' ./db.sql
– Mike Kormendy
Feb 9 '15 at 4:49
This works amazingly fast. I love this solution. I had to do some url replacements and instead of using slashes as my delimiters I used pipes instead (read this up grymoire.com/Unix/Sed.html). Example: sed -i 's|olddomain.com|http://newdomain.com|g' ./db.sql
– Mike Kormendy
Feb 9 '15 at 4:49
1
1
It was so fast i thought it didn't work. But it did! Also, you can just escape slashes like this:
//domain.com
– m.cichacz
Aug 25 '16 at 8:52
It was so fast i thought it didn't work. But it did! Also, you can just escape slashes like this:
//domain.com
– m.cichacz
Aug 25 '16 at 8:52
1
1
Just a reminder that in OS X, the
sed -i
command may throw out unterminated substitute pattern
error. You can use sed -i '' -e 's/oldString/newString/g' ./db.sql
instead.– afterglowlee
Jan 31 '17 at 22:05
Just a reminder that in OS X, the
sed -i
command may throw out unterminated substitute pattern
error. You can use sed -i '' -e 's/oldString/newString/g' ./db.sql
instead.– afterglowlee
Jan 31 '17 at 22:05
1
1
this one suits my need, thank you!
– budiantoip
Aug 1 '17 at 5:01
this one suits my need, thank you!
– budiantoip
Aug 1 '17 at 5:01
add a comment |
Put this in a php file and run it and it should do what you want it to do.
// 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']);
add a comment |
Put this in a php file and run it and it should do what you want it to do.
// 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']);
add a comment |
Put this in a php file and run it and it should do what you want it to do.
// 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']);
Put this in a php file and run it and it should do what you want it to do.
// 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']);
answered Mar 12 '14 at 16:58
Lee Woodman
95621127
95621127
add a comment |
add a comment |
Running an SQL query in PHPmyadmin to find and replace text in all wordpress blog posts, such as finding mysite.com/wordpress and replacing that with mysite.com/news
Table in this example is tj_posts
UPDATE `tj_posts`
SET `post_content` = replace(post_content, 'mysite.com/wordpress', 'mysite.com/news')
Thanks for the query. For my WordPress site the column name iswp_posts
so the query looksUPDATE `wp_posts` SET `post_content` = replace(post_content, 'mysite.com/wordpress', 'mysite.com/news')
– Maris B.
Jul 25 at 12:39
add a comment |
Running an SQL query in PHPmyadmin to find and replace text in all wordpress blog posts, such as finding mysite.com/wordpress and replacing that with mysite.com/news
Table in this example is tj_posts
UPDATE `tj_posts`
SET `post_content` = replace(post_content, 'mysite.com/wordpress', 'mysite.com/news')
Thanks for the query. For my WordPress site the column name iswp_posts
so the query looksUPDATE `wp_posts` SET `post_content` = replace(post_content, 'mysite.com/wordpress', 'mysite.com/news')
– Maris B.
Jul 25 at 12:39
add a comment |
Running an SQL query in PHPmyadmin to find and replace text in all wordpress blog posts, such as finding mysite.com/wordpress and replacing that with mysite.com/news
Table in this example is tj_posts
UPDATE `tj_posts`
SET `post_content` = replace(post_content, 'mysite.com/wordpress', 'mysite.com/news')
Running an SQL query in PHPmyadmin to find and replace text in all wordpress blog posts, such as finding mysite.com/wordpress and replacing that with mysite.com/news
Table in this example is tj_posts
UPDATE `tj_posts`
SET `post_content` = replace(post_content, 'mysite.com/wordpress', 'mysite.com/news')
edited Feb 19 '14 at 2:44
Hooked
45.5k26133203
45.5k26133203
answered Nov 5 '13 at 2:57
guest
20122
20122
Thanks for the query. For my WordPress site the column name iswp_posts
so the query looksUPDATE `wp_posts` SET `post_content` = replace(post_content, 'mysite.com/wordpress', 'mysite.com/news')
– Maris B.
Jul 25 at 12:39
add a comment |
Thanks for the query. For my WordPress site the column name iswp_posts
so the query looksUPDATE `wp_posts` SET `post_content` = replace(post_content, 'mysite.com/wordpress', 'mysite.com/news')
– Maris B.
Jul 25 at 12:39
Thanks for the query. For my WordPress site the column name is
wp_posts
so the query looks UPDATE `wp_posts` SET `post_content` = replace(post_content, 'mysite.com/wordpress', 'mysite.com/news')
– Maris B.
Jul 25 at 12:39
Thanks for the query. For my WordPress site the column name is
wp_posts
so the query looks UPDATE `wp_posts` SET `post_content` = replace(post_content, 'mysite.com/wordpress', 'mysite.com/news')
– Maris B.
Jul 25 at 12:39
add a comment |
UPDATE table SET field = replace(field, text_needs_to_be_replaced, text_required);
Like for example, if I want to replace all occurrences of John by Mark I will use below,
UPDATE student SET student_name = replace(student_name, 'John', 'Mark');
add a comment |
UPDATE table SET field = replace(field, text_needs_to_be_replaced, text_required);
Like for example, if I want to replace all occurrences of John by Mark I will use below,
UPDATE student SET student_name = replace(student_name, 'John', 'Mark');
add a comment |
UPDATE table SET field = replace(field, text_needs_to_be_replaced, text_required);
Like for example, if I want to replace all occurrences of John by Mark I will use below,
UPDATE student SET student_name = replace(student_name, 'John', 'Mark');
UPDATE table SET field = replace(field, text_needs_to_be_replaced, text_required);
Like for example, if I want to replace all occurrences of John by Mark I will use below,
UPDATE student SET student_name = replace(student_name, 'John', 'Mark');
answered Jul 8 '14 at 11:11
Umesh Patil
1,8821816
1,8821816
add a comment |
add a comment |
Another option is to generate the statements for each column in the database:
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_%';
This should generate a list of update statements that you can then execute.
2
Slower than dumping, but for people that don't feel comfortable with the command line, this answer is creative and effective.
– Stephane
Aug 14 '16 at 13:36
2
This is by far the best approach, if you have a lot of data and cannot dump/reload it.
– Kariem
Mar 20 '17 at 8:57
Oh man this worked great! I will share my scripts based on this idea
– Andy
Nov 3 '17 at 17:40
add a comment |
Another option is to generate the statements for each column in the database:
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_%';
This should generate a list of update statements that you can then execute.
2
Slower than dumping, but for people that don't feel comfortable with the command line, this answer is creative and effective.
– Stephane
Aug 14 '16 at 13:36
2
This is by far the best approach, if you have a lot of data and cannot dump/reload it.
– Kariem
Mar 20 '17 at 8:57
Oh man this worked great! I will share my scripts based on this idea
– Andy
Nov 3 '17 at 17:40
add a comment |
Another option is to generate the statements for each column in the database:
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_%';
This should generate a list of update statements that you can then execute.
Another option is to generate the statements for each column in the database:
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_%';
This should generate a list of update statements that you can then execute.
edited Mar 20 '17 at 9:47
Kariem
2,10222847
2,10222847
answered Apr 2 '15 at 13:17
Farid.O
22336
22336
2
Slower than dumping, but for people that don't feel comfortable with the command line, this answer is creative and effective.
– Stephane
Aug 14 '16 at 13:36
2
This is by far the best approach, if you have a lot of data and cannot dump/reload it.
– Kariem
Mar 20 '17 at 8:57
Oh man this worked great! I will share my scripts based on this idea
– Andy
Nov 3 '17 at 17:40
add a comment |
2
Slower than dumping, but for people that don't feel comfortable with the command line, this answer is creative and effective.
– Stephane
Aug 14 '16 at 13:36
2
This is by far the best approach, if you have a lot of data and cannot dump/reload it.
– Kariem
Mar 20 '17 at 8:57
Oh man this worked great! I will share my scripts based on this idea
– Andy
Nov 3 '17 at 17:40
2
2
Slower than dumping, but for people that don't feel comfortable with the command line, this answer is creative and effective.
– Stephane
Aug 14 '16 at 13:36
Slower than dumping, but for people that don't feel comfortable with the command line, this answer is creative and effective.
– Stephane
Aug 14 '16 at 13:36
2
2
This is by far the best approach, if you have a lot of data and cannot dump/reload it.
– Kariem
Mar 20 '17 at 8:57
This is by far the best approach, if you have a lot of data and cannot dump/reload it.
– Kariem
Mar 20 '17 at 8:57
Oh man this worked great! I will share my scripts based on this idea
– Andy
Nov 3 '17 at 17:40
Oh man this worked great! I will share my scripts based on this idea
– Andy
Nov 3 '17 at 17:40
add a comment |
I believe "swapnesh" answer to be the best ! Unfortunately I couldn't execute it in phpMyAdmin (4.5.0.2) who although illogical (and tried several things) it kept saying that a new statement was found and that no delimiter was found…
Thus I came with the following solution that might be usefull if you exeprience the same issue and have no other access to the database than 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`;
To test the expected result you may want to use :
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`;
add a comment |
I believe "swapnesh" answer to be the best ! Unfortunately I couldn't execute it in phpMyAdmin (4.5.0.2) who although illogical (and tried several things) it kept saying that a new statement was found and that no delimiter was found…
Thus I came with the following solution that might be usefull if you exeprience the same issue and have no other access to the database than 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`;
To test the expected result you may want to use :
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`;
add a comment |
I believe "swapnesh" answer to be the best ! Unfortunately I couldn't execute it in phpMyAdmin (4.5.0.2) who although illogical (and tried several things) it kept saying that a new statement was found and that no delimiter was found…
Thus I came with the following solution that might be usefull if you exeprience the same issue and have no other access to the database than 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`;
To test the expected result you may want to use :
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`;
I believe "swapnesh" answer to be the best ! Unfortunately I couldn't execute it in phpMyAdmin (4.5.0.2) who although illogical (and tried several things) it kept saying that a new statement was found and that no delimiter was found…
Thus I came with the following solution that might be usefull if you exeprience the same issue and have no other access to the database than 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`;
To test the expected result you may want to use :
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`;
answered Oct 26 '15 at 12:25
llange
6441913
6441913
add a comment |
add a comment |
Generate change SQL queries (FAST)
mysql -e "SELECT CONCAT( 'update ', table_name , ' set ', column_name, ' = replace(', column_name,', ''www.oldsite.com'', ''www.newsite.com'');' ) AS statement FROM information_schema.columns WHERE table_name LIKE 'wp_%'" -u root -p your_db_name_here > upgrade_script.sql
Remove any garbage at the start of the file. I had some.
nano upgrade_script.sql
Run generated script with --force options to skip errors. (SLOW - grab a coffee if big DB)
mysql -u root -p your_db_name_here --force < upgrade_script.sql
add a comment |
Generate change SQL queries (FAST)
mysql -e "SELECT CONCAT( 'update ', table_name , ' set ', column_name, ' = replace(', column_name,', ''www.oldsite.com'', ''www.newsite.com'');' ) AS statement FROM information_schema.columns WHERE table_name LIKE 'wp_%'" -u root -p your_db_name_here > upgrade_script.sql
Remove any garbage at the start of the file. I had some.
nano upgrade_script.sql
Run generated script with --force options to skip errors. (SLOW - grab a coffee if big DB)
mysql -u root -p your_db_name_here --force < upgrade_script.sql
add a comment |
Generate change SQL queries (FAST)
mysql -e "SELECT CONCAT( 'update ', table_name , ' set ', column_name, ' = replace(', column_name,', ''www.oldsite.com'', ''www.newsite.com'');' ) AS statement FROM information_schema.columns WHERE table_name LIKE 'wp_%'" -u root -p your_db_name_here > upgrade_script.sql
Remove any garbage at the start of the file. I had some.
nano upgrade_script.sql
Run generated script with --force options to skip errors. (SLOW - grab a coffee if big DB)
mysql -u root -p your_db_name_here --force < upgrade_script.sql
Generate change SQL queries (FAST)
mysql -e "SELECT CONCAT( 'update ', table_name , ' set ', column_name, ' = replace(', column_name,', ''www.oldsite.com'', ''www.newsite.com'');' ) AS statement FROM information_schema.columns WHERE table_name LIKE 'wp_%'" -u root -p your_db_name_here > upgrade_script.sql
Remove any garbage at the start of the file. I had some.
nano upgrade_script.sql
Run generated script with --force options to skip errors. (SLOW - grab a coffee if big DB)
mysql -u root -p your_db_name_here --force < upgrade_script.sql
answered Nov 3 '17 at 17:44
Andy
650914
650914
add a comment |
add a comment |
the best you export it as sql file and open it with editor such as visual studio code and find and repalace your words.
i replace in 1 gig file sql in 1 minutes for 16 word that total is 14600 word.
its the best way.
and after replace it save and import it again.
do not forget compress it with zip for import.
add a comment |
the best you export it as sql file and open it with editor such as visual studio code and find and repalace your words.
i replace in 1 gig file sql in 1 minutes for 16 word that total is 14600 word.
its the best way.
and after replace it save and import it again.
do not forget compress it with zip for import.
add a comment |
the best you export it as sql file and open it with editor such as visual studio code and find and repalace your words.
i replace in 1 gig file sql in 1 minutes for 16 word that total is 14600 word.
its the best way.
and after replace it save and import it again.
do not forget compress it with zip for import.
the best you export it as sql file and open it with editor such as visual studio code and find and repalace your words.
i replace in 1 gig file sql in 1 minutes for 16 word that total is 14600 word.
its the best way.
and after replace it save and import it again.
do not forget compress it with zip for import.
answered Nov 11 at 7:15
Omid Ahmadyani
15116
15116
add a comment |
add a comment |
protected by Community♦ May 29 '14 at 19:25
Thank you for your interest in this question.
Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).
Would you like to answer one of these unanswered questions instead?
Possible duplicate of stackoverflow.com/questions/639531/…
– sel
Aug 7 '12 at 4:05
1
You can do some thing like [this][1]. [1]: stackoverflow.com/questions/562457/…
– Pramod
Apr 16 '13 at 6:50
1
This will help you achieve what you need.
– Dom
Aug 25 '14 at 20:07
Possible duplicate of MySQL string replace
– Steve Chambers
Aug 2 '16 at 14:02