Effectuer un chercher/remplacer sur les champs d'une table mysql

Description

mixed mysql_search_replace ( string table, string search, string replace [, array exclude_fields [, bool regexp ]])

Remplace une chaine par une autre dans toutes les entrées de la table spécifiée.
Il est possible d'utiliser des expressions régulières, et de spécifier des champs de la table qu'il ne faut pas modifier.

[Exemples]

+ Vous voulez remplacer tous les 1 par des 0 dans votre table 'my_table':
      • mysql_search_replace("my_table", "1", "0"); ***


+ Vous voulez remplacer tous les champs contenant XXX par la chaine [censure], mais en excluant le champ "id":
      • mysql_search_replace("my_table", "^.*([xX]{3}).*$", "[censure]", array("id"), TRUE); ***

Source / Exemple :


/**

  • Remplace une chaine par une autre dans toutes les entrées
  • de la table spécifiée
*
  • @public
  • @requires une connexion mysql a été ouverte
  • @param string table la table dans laquelle faire la modification
  • @param string search la chaine a rechercher
  • @param string replace la chaine par laquelle on va remplacer
  • @param array exclude_fields la liste des champs de la table qu'il ne faut
  • pas modifier.
  • @param bool regexp s'il est mis a TRUE, search et replace sont considérées
  • comme des expressions régulières POSIX.
    • /
function mysql_search_replace($table, $search, $replace, $exclude_fields = array(), $regexp = FALSE) { $query = "SELECT * FROM `$table`"; $res = mysql_query($query) or die('<code style="color:#CCFFFF">'.htmlspecialchars($query).'
'.mysql_error());

// création de la fonction de remplacement
if ($regexp) {
$foo = 'str_replace';
}
else {
$foo = 'ereg_replace';
}
$func = create_function('$a', 'return '.$foo.'("'.addslashes($search).'", "'.addslashes($replace).'", $a);');

// parcours des résultats
while (FALSE !== ($row = mysql_fetch_assoc($res))) {
$row2 = array();
// modification du tableau
$modif = FALSE;
foreach ($row as $key=>$val) {
if (!in_array($key, $exclude_fields)) {
$str = $func($val);
if ($str != $val) { // there's been a modif
$modif = TRUE;
}
$row2[$key] = $str;
}
else { // do not modify !
$row2[$key] = $val;
}
}
// modification de la table
if ($modif) { // modify the table
$set = "";
$where = "";
foreach ($row2 as $key=>$val) {
$set .= "`$key` = '" . addslashes($val) . "', ";
$where .= "`$key` = '" . addslashes($row[$key]) . "' AND ";
}
$set = substr($set, 0, -2);
$where = substr($where, 0, -5);
$query = "UPDATE `$table` SET $set WHERE $where";
mysql_query($query) or die('
'.htmlspecialchars($query).'
'.mysql_error());
}
}
}
</code>

Conclusion :


L'archive contient la documentation générée par AutoPhpDoc.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.