Sommaire
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");
}
?>
Aucune discussion
Ajouter un commentaire
Suivre les commentaires :
|
