Hromadné najít & nahradit v MySQL databázi

Pakliže migrujeme webové stránky spolu s databází, je nutné nahradit veškeré výskyty např. staré domény za tu novou.

Jelikož phpMyAdmin nepodporuje hromadné najít&nahradit (lze to udělat pouze v předem definovaných tabulkách a sloupcích), musíme si pomoci vlastním PHP skriptem, který vše obstará za nás:

<?php
// připojení k databází
$server= "server";
$jmeno = "jmeno";
$heslo = "heslo";
$databaze = "databaze";

mysql_connect($server, $jmeno, $heslo);

// jake stringy - retezce - chceme najit ($najit) a cim je nahradit ($nahradit)
$najit = "text-ktery-chceme-nahradit";
$nahradit = "text-kterym-chceme-nahrazovat";

//samotne nahrazeni stringu - retezcu
$loop = mysql_query("
 SELECT
 concat('UPDATE ',table_schema,'.',table_name, ' SET ',column_name, '=replace(',column_name,', ''{$najit}'', ''{$nahradit}'');') AS s
 FROM
 information_schema.columns
 WHERE
 table_schema = '{$databaze}'")
or die ('Nelze nahradit vyskyty: ' . mysql_error());

while ($query = mysql_fetch_assoc($loop))
{
 mysql_query($query['s']);
}
?>

Ve výše uvedeném skriptu stačí pouze doplnit přihlašovací údaje k databázi ($server, $jmeno, $heslo, $databaze) a změnit odpovídající stringy (řetězce), které chcete napříč celou databází změnit.

Doplňte tedy aktuální řetězec ($najit), který chcete najít a nahradit ho novým řetězcem ($nahradit).

Nakonec skript spusťte. Jen si dejte pozor, zda Vám stačí na Vašem hostingu/serveru dostatečný max_execution_time. Například  Databáze o velikosti 20MB se zpracovávala na poměrně výkonném serveru kolem 5 vteřin.

2 komentáře u „Hromadné najít & nahradit v MySQL databázi“

    1. Ahoj Romane, určitě! Mělo by stačit zaměnit starší, již nepodporovanou, funkci mysql_* za novější mysqli_*, která je v PHP 7.3 podporovaná. 🙂

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *