Adatbázisban szöveg csere

Nekem ma kellett ez, gondoltam megosztom veletek is, hátha majd más is hasznát veszi.











A lényege, hogy ez egy olyan PHP program, amit ha beilleszted egy valamicsoda.php fájlba, kitöltöd a megfelelő részeket - majd a böngésződben futtatod (hxxxp://honlapod.com/valamicsoda.php) - akkor arra lesz képes ez a program, hogy az adatbázisodban az összes “akámilyen” szöveget lecseréld egy “akámilyen2” másik szövegre. Természetesen minden egyező szöveget cserél, tehát csak óvatosan vele. Akkor is cserél, ha az a bizonyos szöveg egy másik szóban található meg pl: “egyakármilyenszöveg” esetében is lecseréli az előbbi példánál maradva: “egyakármilyen2szöveg” -re.











Tudom, ez egy kissé amatőr a leírásra sikeredett, de a lényeg úgy is ez:









Quote:

<?php





/****************


* Konfiguráció *


****************/





// MySQL kapcsolódási adatok


define('MYSQL_HOST', 'localhost');


define('MYSQL_USER', 'username');


define('MYSQL_PASS', 'password');





// Mely adatbázisokon legyen csere


$mysql_dbs = array('database1', 'database2', 'database3');





// Miről mire legyen csere


$from = 'egyikszövegről';


$to = 'másikszövegre';





/****************


* Program *


****************/





set_time_limit(0);


$mysqli = new MySQLi(MYSQL_HOST, MYSQL_USER, MYSQL_PASS);


if(mysqli_connect_errno() != 0)


{


echo 'Hiba: #' . mysqli_connect_errno() . ' | ' . mysqli_connect_error() . '


';


exit;


}


$from = $mysqli->real_escape_string($from);


$to = $mysqli->real_escape_string($to);





echo '

Futtatott utasítások:




';





foreach($mysql_dbs as $database)


{


$query = "SHOW TABLES FROM `{$database}`;";


echo '


' . $query . '


';





$tables = $mysqli->query($query);


if($mysqli->errno != 0)


{


echo "Hiba: #{$mysqli->errno} | {$mysqli->error}


";


break;


}





while(list($table) = $tables->fetch_row())


{





$query = "SHOW COLUMNS FROM `{$database}`.`{$table}`;";


echo '


' . $query . '


';





$fields = array();


$columns = $mysqli->query($query);


if($mysqli->errno != 0)


{


echo "Hiba: #{$mysqli->errno} | {$mysqli->error}


";


break 2;


}


while(list($column) = $columns->fetch_row())


$fields[] = "`{$column}` = REPLACE(`{$column}`, '{$from}', '{$to}')";





$query = "UPDATE `{$database}`.`{$table}` SET " . implode(', ', $fields) . ";";


echo $query . '


';





$mysqli->query($query);


if($mysqli->errno != 0)


{


echo "Hiba: #{$mysqli->errno} | {$mysqli->error}


";


break 2;


}


}


}





echo '



A futás befejeződött!

';








Konfiguráció alatt értelemszerűen töltsd ki a MySQL kapcsolódási adatokat.





Mely adatbázisokon legyen csere:


Nekem csak egy adatbázisban kellett a csere, ezért én így módosítottam:


$mysql_dbs = array('database1');





Miről mire legyen csere


Értelemszerűen "egyikszövegről" legyen csere "egymásikszövegre"





A Script böngészőben futtatva automatikusan elindul - majd a futtatás végén kiírja a módosított táblák nevét stb.stb...





Ezt a PHP Scriptet Warner barátom készítette nekem, ezért úgy gondolom ez a kis backlink jár neki.





Használja egészséggel az, akinek épp egy ilyenre volt szüksége.

Ok megjegyeztük. Jóljöhet mondjuk egy domaines költözéskor az x.hu y.com ra cseréjére, az adatbázisban.

Bingó mp33portal, nekem ma pont erre kellett.











A honlapomon a képeknek abszolút URL-cím volt megadva, így rengeteg helyen kellett volna domaint cserélni… és “lusta” voltam kiimportálni az adatbázist, szöveget cserélni, majd visszatölteni. Ez így mondjuk (adatok kitöltésével együtt) 1 percnél biztos nem tart tovább (maga a script, a másodperc törtrésze alatt lefut).

http://wordpress.org/extend/plugins/search-and-replace/ :rolleyes:

Na, újra itt a kód, mert a fórum motorja elkódolta:









Code:

<?php



/*

* Szövegcsere teljes adatbázison

* Készítette: Warner

* Weblap: http://phpstudio.hu

* Kapcsolat: warner@phpstudio.hu

* 2009. 08. 12.

*/



/****************

* Konfiguráció *

****************/



// MySQL kapcsolódási adatok

define('MYSQL_HOST', 'localhost');

define('MYSQL_USER', 'username');

define('MYSQL_PASS', 'password');



// Mely adatbázisokon legyen csere

$mysql_dbs = array('database1', 'database2', 'database3');



// Miről mire legyen csere

$from = 'miről';

$to = 'mire';



/****************

* Program *

****************/



set_time_limit(0);

$mysqli = new MySQLi(MYSQL_HOST, MYSQL_USER, MYSQL_PASS);

if(mysqli_connect_errno() != 0)

{

echo 'Hiba: #' . mysqli_connect_errno() . ' | ' . mysqli_connect_error() . '
';

exit;

}

$from = $mysqli->real_escape_string($from);

$to = $mysqli->real_escape_string($to);



echo '

Futtatott utasítások:



';



foreach($mysql_dbs as $database)

{

$query = "SHOW TABLES FROM `{$database}`;";

echo '
' . $query . '
';



$tables = $mysqli->query($query);

if($mysqli->errno != 0)

{

echo "Hiba: #{$mysqli->errno} | {$mysqli->error}
";

break;

}



while(list($table) = $tables->fetch_row())

{



$query = "SHOW COLUMNS FROM `{$database}`.`{$table}`;";

echo '
' . $query . '
';



$fields = array();

$columns = $mysqli->query($query);

if($mysqli->errno != 0)

{

echo "Hiba: #{$mysqli->errno} | {$mysqli->error}
";

break 2;

}

while(list($column) = $columns->fetch_row())

$fields[] = "`{$column}` = REPLACE(`{$column}`, '{$from}', '{$to}')";



$query = "UPDATE `{$database}`.`{$table}` SET " . implode(', ', $fields) . ";";

echo $query . '
';



$mysqli->query($query);

if($mysqli->errno != 0)

{

echo "Hiba: #{$mysqli->errno} | {$mysqli->error}
";

break 2;

}

}

}



echo '


A futás befejeződött!

';



hmm… de legalább csak arra az időre engedélyezd hasonló kódok futását amíg használod. Tipikus veszélyforrás :slight_smile:

Nem értem hgrg…, futtatás után törölni kell a fájlt…, vagy nem? vagy nem értem…

elég ha a jogosultságokat leveszed róla ill htdocs/public_html/www vagy akármiféle www-root mappán kívül helyezed :slight_smile: