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.
Díky moc za script.
Jen mi nefunguje na php 7.3. Jde to nějak poladit? Děkuji.
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á. 🙂