PHP/MySQL INSERT INTO en masse qui déraille (oubli de données)

PHP/MySQL INSERT INTO en masse qui déraille (oubli de données) - PHP - Programmation

Marsh Posté le 07-07-2009 à 15:54:55    

Bonjour,
 
J'ai crée un script tout bête pour migrer des données d'une table vers une autre. Le script fonctionne presque mais il me zappe des entrées [:corten]
 
Voici le script :
 

Code :
  1. ## FICHIER DE MIGRATION VERS DRUPAL
  2. # CONFIGURATION DE LA BASE DE DONNEE
  3. $dbhost = 'localhost';
  4. $dbname = 'drupal';
  5. $dbuser = 'root';
  6. $dbpass = '';
  7. # CONNEXION MYSQL
  8. $connect = mysql_connect($dbhost,$dbuser,$dbpass);
  9. mysql_select_db($dbname,$connect);
  10. //IMPORTATION DES DONNEES DANS LA BASE NODE
  11. # LECTURE DES DONNEES DE LA TABLE SOURCE
  12. $result = mysql_query('
  13. SELECT
  14. *
  15. FROM
  16. recettes
  17. ORDER BY
  18. id
  19. ASC');
  20. $row = mysql_fetch_array($result);
  21. while($row = mysql_fetch_array($result)) {
  22. $numid=mysql_fetch_array(mysql_query('SELECT max(nid) FROM node'));
  23. $i = ++$numid['0'];
  24. mysql_query("
  25. INSERT INTO node
  26. (nid,vid ,type ,language ,title ,uid ,status ,created ,changed ,comment ,promote ,moderate ,sticky ,tnid ,translate)
  27. VALUES
  28. ('NULL' ,'".$i."' , 'recette', 'fr', '".$row[titre]."', '1', '1', '1246872423', '1246872423', '2', '1', '0', '0', '0', '0')
  29. " ) or mysql_error();
  30. }


En gros, la base recette contient 383 recettes et une fois le script lancé, il me fait tout nickel mais... je perds 5 recettes en cours de route.
Du coup la table "node" contient l'ensemble des données, parfaitement recopiées, moins 5 et ça me pose un gros problème car après, je fais le même traitement mais sur la table node pour en copier une partie du contenu dans une autre table :whistle:  
 
Savez vous comment c'est possible ?
Je deviens dingue. :pt1cable:  
 
MERCI

Reply

Marsh Posté le 07-07-2009 à 15:54:55   

Reply

Marsh Posté le 07-07-2009 à 16:33:51    

Il faudrait examiner ces cinq enregistrements manquants. Il y a peut-être des apostrophes dans le titre, ou des champs vides, ou des clés identiques, ou d'autres choses particulières, que n'ont pas les autres enregistrements.

Reply

Marsh Posté le 07-07-2009 à 16:38:25    

Merci pour ta réponse.
Les champs manquants ne sont pas des doublons et ne semblent pas avoir de particularités car là je perds 5 recettes, mais quand je fais la seconde opération (partant de lanouvelle base et copiant dans une autre) là j'en perds 30 !!!

Reply

Marsh Posté le 07-07-2009 à 17:34:40    

met un "or die(mysql_error());  " pour t'afficher l'erreur si tu as une erreur de requete
 
et sinon  
tu affiche la requete génére, et tu teste a la main si ta requete marche  
et tu verra par la même occasion si dans un premier temps elle est générée

Reply

Marsh Posté le 07-07-2009 à 17:36:16    

Merci pour la réponse c'est sympa.
Aucune erreur renvoyée.

 


Message édité par vanquishV12 le 07-07-2009 à 17:55:05
Reply

Marsh Posté le 07-07-2009 à 17:59:06    

renvoie le code SQL généré (vérifie qu'il ne manque rien et qu'il soit à priori correct), et lance le dans un phpmyadmin voir ce que ça donne.

Reply

Marsh Posté le 07-07-2009 à 18:03:30    

Alors là par contre je n'ai rien compris!

Reply

Marsh Posté le 08-07-2009 à 07:46:39    

Au lieu d'executer l'SQL avex mysql_query, tu l'imprimes à l'écran, et après tu balances ça "à la main" dans phpmyadmin, et tu regardes pourquoi ça plante pour ces requêtes


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 08-07-2009 à 08:59:48    

esox_ch a écrit :

Au lieu d'executer l'SQL avex mysql_query, tu l'imprimes à l'écran, et après tu balances ça "à la main" dans phpmyadmin, et tu regardes pourquoi ça plante pour ces requêtes


en clair tu fait ca

Code :
  1. while($row = mysql_fetch_array($result)) {
  2.                $numid=mysql_fetch_array(mysql_query('SELECT max(nid) FROM node'));
  3.                 $i = ++$numid['0'];
  4. //generation de la requete
  5.                $sql="INSERT INTO node (nid,vid ,type ,language ,title ,uid ,status ,created ,changed ,comment ,promote ,moderate ,sticky ,tnid ,translate)
  6.                      VALUES ('NULL' ,'".$i."' , 'recette', 'fr', '".$row[titre]."', '1', '1', '1246872423', '1246872423', '2', '1', '0', '0', '0', '0');"
  7.              echo $sql."<br>"//tu affiche la requete  (le br c'est juste pour que ca soit plus lisible a l'affichage)
  8.                mysql_query($sql) or mysql_error();//tu execute ta requete
  9. }

Reply

Marsh Posté le 08-07-2009 à 09:09:38    

Bon j'ai compris mon erreur :D  
Je me connectais pas sur la bonne base [:kaio]
 
Donc tout était bon.
Un grand merci pour ceux qui ont essayé de m'aider.

Reply

Marsh Posté le 08-07-2009 à 09:09:38   

Reply

Marsh Posté le 08-07-2009 à 10:23:08    

ah oui en effet il parait que c'est mieux quand même!!!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed