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

Ceci est une ARCHIVE, peut-être périmée. Vérifiez bien les compatibilités !

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");
}

?>

Discussion

Aucune discussion

Ajouter un commentaire

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom

Dernière modification de cette page le 26 octobre 2004