Étiquette : php

[PHP] Modifier une chaîne de caractères sur tout un serveur de BDD

Nous sommes en 2017 et ce script est dépassé (bien que toujours fonctionnel). Utilisez maintenant mysqli ou PDO, ou bien l’excellent outil clé en main Search Replace DB de Interconnecit.

Il y a quelques temps, ma société à complètement revu l’adressage IP du réseau.

J’ai donc rencontré des soucis avec tous mes sites WordPress et Prestashop, qui stockent l’URL dans la base de données.

Voici donc un petit script PHP/MySQL qui va modifier dans chaque table de chaque base une chaîne de caractères.

Il s’agit d’un script sans messages d’erreurs et non commenté, mais cela ne pose pas vraiment de soucis car il est directement exécutable : changez simplement les données en constantes (« define »).

Je vous suggère vivement de conserver la connexion, certes obsolète, avec mysql_connect au cas où vous avez des base de données en mysql simple (avec mysqli_connect, celles-ci ne seront pas prises en compte).

 

define('_DB_HOST_', 'localhost');
define('_DB_USER_', 'root');
define('_DB_PASS_', '');
define('_OLD_IP_', '192.168.200.155');
define('_NEW_IP_', '172.16.200.155');

$connect = mysql_connect(_DB_HOST_, _DB_USER_, _DB_PASS_);

$databases =  mysql_query("SHOW databases");
while($database = mysql_fetch_object($databases)) {
	mysql_select_db($database->Database, $connect);
	$tables = mysql_query("SHOW tables");
	if(mysql_num_rows($tables) > 0) {
		while($table = mysql_fetch_object($tables)) {
			$fieldName = 'Tables_in_'.$database->Database;
			$tableName = $table->$fieldName;
			$columns = mysql_query("SHOW columns FROM ".$tableName);
			if(mysql_num_rows($columns) > 0) {
				while($column = mysql_fetch_object($columns)) {
				    $fields = mysql_query("UPDATE ".$tableName." SET ".$column->Field." = REPLACE(".$column->Field.", '"._OLD_IP_."', '"._NEW_IP_."')");
					if(mysql_affected_rows() > 0) {
						echo '<p>Modification dans '.$database->Database.' » '.$tableName.' » '. $column->Field.'</p>';
					}
				}
			}
		}
	}
}

 

Vous pouvez bien sûr adapter le script à une seule base de données par exemple, en créant l’objet $database avec vos données et en supprimant le « while » associé.

 

Helper « Lorem » : Simplifiez vos tests d’intégration

Un simple article pour mettre à votre disposition un petit helper créé par mes soins. Il est tout simple, mais il fait gagner un temps fou lors de l’intégration / développement de votre site.
Je l’ai appelé « Lorem » (j’avoue, c’est vraiment pas original), car il s’agit d’un générateur de texte.

 

Revue des fonctions :

  • text(nombreDeCaractères) : génère du text brut sans mise en forme
  • html() : renvoie tout les types de balises afin de juger de l’apparence de vos contenus
  • createlist(nombreDeLi) : génère une liste de type <ul>
  • createForm() : renvoie un formulaire contenant les différents champs possibles

 

Télécharger  le Helper Lorem

Changer de base de données dans un module

Il y a peu, j’ai du développer un site qui récupérait des infos dans une autre base de données sous Joomla!. J’ai longtemps cherché comment indiquer à Joomla! les nouvelles informations de connexion, jusqu’à trouver le fameux Graal, que voici :

$option = array();
$option['driver']   = 'mysql'; 
$option['host']     = $alt_host;
$option['user']     = $alt_user;
$option['password'] = $alt_password;
$option['database'] = $alt_databse;
$option['prefix']   = $alt_prefix;

$db = & JDatabase::getInstance($option);

Je vous conseille fortement l’utilisation de variables comme dans l’exemple ci-dessus, ou de constantes si vous ne savez pas comment les utiliser.

Ceci vous permettra de stocker ces informations dans le fichier configuration natif de Joomla!.

Cette astuce est valable sur la version 2.5 de Joomla!, et sauf preuve du contraire sur la version 3 qui est sortie récemment.