[SimpleXML] Importer un flux XML dans une table

Eléphanteau du PHP | 19 Messages

16 avr. 2008, 22:20

Bonjour,


Je souhaite importer un flux XML dans une base de donnée MYSQL.

Cependant, mon flux contient des apostrophes dans le champ description ce qui bloque l'insertion dans la base de donnée.

Autrement, y a t-il un encodage spéciale à spécifier pour que les accents soient bien prise en compte dans ma base de donnée.


Code :

Code : Tout sélectionner

<?xml version="1.0" encoding="iso-8859-1"?> <productFeed version="0" timestamp="20080413:13:49:55"> <product id="960" delete="false"> <name>ORCHIDEE JAUNE</name> <productURL>http://affiliation.florajet.com/track.php?redir=ZGV0YWlsLnBocD9wYXlzPTcyJnByb2R1aXQ9OTYw&appel=perez_468</productURL> <imageURL>http://www.florajet.com/produits/150/960.jpg</imageURL> <price>44.00</price> <description> <![CDATA[Originaire des régions tropicales et sub-tropicales d'Asie, l'orchidée papillon est très floriflère.Ses hampes retombantes portent des fleurs toute l'année, plus ou moins rondes et étoilées qui peuvent durer jusqu'à huit semaines. On l'apprécie pour sa facilité de culture. <br /><br />]]> </description> <fields> </fields> <categories> <category name="Orchidee" /> </categories> </product>

Code PHP

Code : Tout sélectionner

<?php //connection a la base de donnee $dbhost = "localhost"; $dbuser = "root"; // mysql user $dbpass = ""; // mysql password $dbname = "spip"; // mysql database $conn=mysql_connect($dbhost,$dbuser,$dbpass) or die(erreurServeurMySQL()); mysql_select_db($dbname,$conn) or die('Erreur de selection '.mysql_error()); $flux = simplexml_load_file('http://localhost/spip/catalogue.xml'); foreach ($flux->product as $item) { $nom = $item->name; $url = $item->productURL; $image = $item->imageURL; $prix = $item->price; $description = $item->description; $fields = $item->fields; $categorie = $item->categories; $sql = "INSERT INTO `affiliation_fleurs` (`id`, `nom`, `url`,`image`,`prix`,`description`,`fields`, `categorie`) VALUES ('', '$nom', '$url', '$image','$prix','$description','$fields','$categorie')"; $req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); echo 'données inserées en base'; } ?>

Merci pour votre aide,

José

Mammouth du PHP | 2937 Messages

17 avr. 2008, 13:22

Il suffit de procéder aux échappements nécessaires, en recourant à la fonction mysql_real_escape_string().

Cela dit, comme tu utilises SimpleXML (et donc PHP 5), tu peux utiliser PDO pour les interactions avec la base de données, PDO qui propose, parmi ses fonctionnalités, les requêtes préparées, qui échappent automatiquement les caractères sensibles.