Transfert d’enregistrements d’une base vers les champs #Extra

All contributions published for previous SPIP versions

Vous aviez une base non Spip. Vous avez créé des champs #Extra dans une base Spip. Mais comment transférer les enregistrements de l’une vers le champ Blob des champs #Extra de l’autre ?

Toujours pour ma base Guide Méditerranée, j’ai créé un certain nombre de champs #Extra (une bonne dizaine).

Le problème principal, c’est que les champs #Extra sont enregistrés dans un unique champ de type Blob, un type bien particulier qu’on ne peut pas “lire” directement avec phpmyadmin.

Un champ Blob est un champ de taille “illimitée”, où les différents enregistrements sont inscrits à la suite les uns des autres : code-x:nom du champ; code-y:enregistrement etc.

Comment faire, alors, pour passer les enregistrements que j’avais dans une base “normale” (1 champ = 1 enreg) à cette base Spip à champs #Extra (1 champ = n enreg) ?

Il faut sérialiser !!!

-  Vous pouvez reprendre le code ci-dessous et l’adapter pour créer un fichier de remplisage automatique d’une base à une autre.

Explications

On suppose que vous savez déjà comment vous connecter à la base de données. Mais voici un rappel (que vous pouvez intégrer en tête du ficher Enreg_A_Blob.php3 ci-dessous) :

$edserveur='xxxxx'; //serveur
 $edlogin='cmonlogin'; //login
 $edpass='cmonmotdepasse'; //mot de passe
 $eddb='cmabase'; //base de donnée

 //Connection a la base de donnée dans ce fichier afin de ne pas recreer d'autre connection dans les autres fichiers
 $id_connex=mysql_connect("$edserveur" , "$edlogin" , "$edpass") or die("connexion impossible session");
 mysql_select_db("$eddb",$id_connex);

Ensuite, il faut :

  • Point A) effectuer une requête sur la base de départ et y sélectionner les champs que nous allons placer dans le champ Blob unique de la base Spip des articles.
  • Point B) Transformer en variable le contenu de chaque champ
  • Point C) Créer un “tableau” de correspondance entre les champs #Extra existants et les variables qu’on va enregistrer dans le champ Blob qui les contient
  • Point D) Utiliser la commande php “miracle” qui transforme tout cela pour le champ Blob
  • Point E) Insérer tout cela dans la base Spip. A noter que les champs #extra sont enregistrés dans le champ nommé extra (!) des bases articles, auteurs et rubriques.

Et voilà !

Par prudence, faites un essai après avoir fait une copie de votre base Spip. Histoire de vérifier que tout colle bien.

Enreg_A_Blob.php3

<?
// A) Requête sur la base d'origine
$requete="SELECT * FROM guidemed ";
$id_result=mysql_query($requete, $id_connex);
while($table=
mysql_fetch_array($id_result, MYSQL_ASSOC))
{

// B) Mise en vvariable des enregistrements correspondants aux différents champs 

$nom=$table[nom]; 
$prenom=$table[prenom];
$naiss=$table[naiss];
$prof="$table[profession]";
$adresse="$table[adresse]";
$codepost="$table[codpost]";
$ville="$table[ville]";

// C) Formatage (Sérialisation) des champs pour les faire rentrer dans le champ Blob.
//Le premier terme correspond au nom du champ #Extra de la base Spip ; le second à l'enregistrement - devenu une variable - de la base de départ.

$extraorg=array(
"Prenom"=>"$prenom",
"Datenaiss"=>"$naiss",
"Profession"=>"$prof",
"Adresse"=>"$adresse",
"Code"=>"$codepost",
"Ville"=>"$ville"
);

// D) La commande php qui transforme le "tableau" précédent en suite acceptable par le champ Blob

$extraserial=addslashes(serialize($extraorg));

// Autant ajouter l'heure à l'enregistrement de l'article!

$time=time();
$date_heure=date('Y-m-d H:i:s',$time);

// E) On insère tout cela dans la base Spip. 

$req="INSERT INTO spip_articles SET titre='$nom', extra='$extraserial', date='$date_heure', idx='1' ";
$verif=mysql_query($req, $id_connex) or die ("Impossible");
}

?>

updated on 26 October 2004

Discussion

Aucune discussion

Comment on this article

Who are you?
  • [Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom