|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : février 2006 Messages : 145 ![]() |
Bonjour à tous,
J'essaie actuellement d'intégrer à ma base de données le contenu d'un flux XML. J'ai donc un script qui me permet de parser le fichier mais au lieu de lire les données, je les insère à ma BDD. Problème : sur les 700 entrées, seulement 260 sont ajoutées à la table. Chose étrange, j'ai mis un echo après chaque requête en insert, et il m'affiche bien les 700 entrées. Quelqu'un a-t-il une idée sur ce phénomène ? Merci d'avance.
__________________
Le mieux n'est pas forcément l'ennemi du bien. |
|
|
00
|
|
|
#2 |
|
Membre actif
![]() Inscription : avril 2011 Messages : 426 ![]() |
On peut voir le code ?
|
|
|
00
|
|
|
#3 | ||||
|
Membre du Club
![]() Inscription : février 2006 Messages : 145 ![]() |
Je vais essayer de faire simple. Je vous épargne les fonctions du parser.
Le code du parser : Code :
Code :
__________________
Le mieux n'est pas forcément l'ennemi du bien. |
||||
|
|
00
|
|
|
#4 |
![]() ![]() Inscription : septembre 2010 Messages : 7 244 ![]() |
pourquoi t'utilise pas SimpleXML ?
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#5 |
|
Membre du Club
![]() Inscription : février 2006 Messages : 145 ![]() |
Parce que je ne suis pas sous PHP5.
Problème résolu, cependant : j'ai lancé une visualisation des erreurs Sql et il y avait des champs avec apostrophes qui interrompaient la requête. J'ai ajouté la fonction htmlspecialchars à la variable du champs concerné et tout est rentré dans l'ordre.
__________________
Le mieux n'est pas forcément l'ennemi du bien. |
|
|
00
|
|
|
#6 | ||
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 738 ![]() |
Salut
Il faudrait obtenir le nombre de résultat qu'a normalement effectué la requête, avec la fonction mysql_affected_rows() Faire quelque chose comme : Code :
Si ce n'est pas le cas, alors il doit avoir une erreur. Faudrait alors faire un mysql_error(), ou activer l'affichage des erreurs de MySQL (php.ini -> mysql.trace_mode à On) pour en savoir un peu plus. A coté de ça, tu prends apparemment aucune précaution sur les données que tu insert. Si un ID n'a aucune valeur par exemple alors que c'est la clé primaire, ça va théoriquement planter. Ca peu être le cas sur d'autres données qui pourrait être non conformes.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
||
|
|
00
|
|
|
#7 | |
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 738 ![]() |
Citation:
C'est un problème d'échappement de certains caractère comme les '. Cette fonction protège aussi contre des éventuels injections SQL. Les remplacer par des entités HTML ce n'est pas ce qui à de mieux. Théoriquement il vaut mieux conserver des données brut dans la Bdd, et mettre des entités Html que dans les pages Html.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
|
|
|
00
|
|
|
#8 |
![]() ![]() Inscription : septembre 2010 Messages : 7 244 ![]() |
Ah bon, t'es chez quel hébergeur ?
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#9 |
|
Membre du Club
![]() Inscription : février 2006 Messages : 145 ![]() |
@RunCodePhp
C'est effectivement en faisant un mysql_error() que j'ai compris d'où venait l'erreur, un problème d'apostrophe dans une donnée. Concernant les précautions sur les données, l'ID est celle du produit dans le flux initial, pas celle de l'objet inséré dans la base, il a son propre identifiant avec clé primaire. Je retiens ton idée pour mysql_real_escape_string(), je l'utilise pour les insertions de données via des formulaires sur site, pas dans des admin sécurisées. Mais ce sera surement plus propre. @stealth35 Je suis chez 1&1 et à chaque fois que j'utilise SimpleXML, j'ai une erreur.
__________________
Le mieux n'est pas forcément l'ennemi du bien. |
|
|
00
|
|
|
#10 | |
![]() ![]() Inscription : septembre 2010 Messages : 7 244 ![]() |
Citation:
__________________
http://blog.stealth35.com/ |
|
|
|
00
|
|
|
#11 |
|
Membre actif
![]() Inscription : avril 2011 Messages : 426 ![]() |
Étonnant, je l'utilise SimpleXml chez 1&1 depuis deux ans au moins
|
|
|
00
|
|
|
#12 | |||
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 738 ![]() |
Citation:
Cette fonction n'a pas juste pour mission de sécuriser, mais de faire en sorte d'échapper certains caractères afin que l'opération (insertion, mise à jour, etc ...) se fasse sans "plantage". Le faire systématiquement dans ce cadre là (au niveau de la Bdd) rendra plus stable ton code (admin ou pas). Ou alors, si le type de donné est connu, comme un entier, un float, un booléen, on peu caster cette donnée, c'est à mon sens plus efficace/radical que cette fonction. Exemple : Code :
Mise à par ça, évoluer vers PDO ou MySQLi en utilisant des requêtes préparées serait pas mal non plus, car les fonctions mysql_truc_muche(), c'est obsolète, faut le savoir.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
|||
|
|
00
|
|
|
#13 |
|
Membre du Club
![]() Inscription : février 2006 Messages : 145 ![]() |
Merci RunCodePhp pour ces précisions.
Quant au passage à la POO (c'est bien ça dont tu parles ?), il va falloir que je m'y mette mais ça ne va pas se faire en 2 jours...
__________________
Le mieux n'est pas forcément l'ennemi du bien. |
|
|
00
|
|
|
#14 | |
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 738 ![]() |
Citation:
On peu exploiter une classe (comme PDO) dans un contexte procédural (de manière classique). Il faut quand même un apprentissage du comment l'exploiter, au même titre quand on découvre une nouvelle fonction, c'est tout. Il y a des exemple de codes dans la doc : -> connexion à la base -> Une requête SQL (un SELECT) avec une requête préparée avec bindValue Le forum PDO qui permet d'avoir pas mal d'exemples de code. Et un tuto pour comprendre PDO Il faut s'accorder un peu de temps, ça c'est sûr. Il y a moyen de passer en douceur à PDO (Il faut Php5 cependant)
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com