Votre question

execution script php

Tags :
  • Php
  • Script
  • Base de données
Dernière réponse : dans Programmation
22 Octobre 2013 15:01:38

bonjour jai une base de données de près de 50 milles information sur la quelle ma requette doit faire 4000 tour
le problème se pose sr le temps d'exécution car j'ai utiliser la fonction set_time_limit(0); mais pas de grand changement sur ma requette car j'ai toujours ce message d'érreurs
après un certain temps d'exécution voici le message qui s'affiche
"Call to a member function fetch() on a non-object in C:\wamp\www\sitenom\nom_arabes.php on line 11"
ceci après environ 3000 lignes de control

Autres pages sur : execution script php

23 Octobre 2013 13:20:17

Bonjour,
et tu sur que cela viens bien du temps d’exécution ?

place ton code dans un try-catch et regarde si cela ne viens pas d'un info "erroné" présente dans ta base de donner .
23 Octobre 2013 18:23:43

Peut-être que le limite de temps est effective pour le script, mais que le serveur de base de données n'est pas configuré pour cette limite de temps ?
Contenus similaires
23 Octobre 2013 19:05:30

voici le code qui pose problème

  1. while($pre=$rep->fetch())
  2. {
  3. $nom = $pre[pré];
  4. $rep1 = $bdd->query("select * from tempons where noms like '%$nom%'");
  5. time();
  6. while($data = $rep1->fetch()){
  7. //affichage resultaici
  8. }
  9. }
  10. $rep->closeCursor();

23 Octobre 2013 19:31:58

Humm , ton code n'est pas bon !
Enfin ce n'est pas comme ça que l'on utilise la pdo ....
Voila a quoi ton code devrait ressembler :

  1. $PDO = new PDO('mysql:host=localhost;port=3306;dbname=******', '******', '******');
  2.  
  3. $prepare1 = $PDO->prepare("SELECT * FROM fichiers WHERE name=?");
  4. $prepare2 = $PDO->prepare("select * from tempons where noms like ?");
  5.  
  6. $prepare1->execute(array($name));
  7. while($pre=$prepare1->fetch(PDO::FETCH_OBJ))
  8. {
  9. $rep1 = $prepare2->execute(array($pre->pre));
  10. while($data = $rep1->fetch()){
  11. //affichage resultaici
  12. }
  13. }




heuuu juste comme ça , c'est une erreur le "pré" ???
jamais d'accents !!!
24 Octobre 2013 11:25:57

voici ùon code après modification suite à vos remarques
  1. <?php
  2. //time();
  3. //include("connexion/connexion.php");
  4. try{
  5. $bdd = new pdo('mysql:host=localhost;dbname=bd_clients','****','');
  6. }
  7. catch(Exception $e)
  8. {
  9. die('Erreur : '.$e->getmessage());
  10. }
  11.  
  12. $rep = $bdd->query("select * from prenoms order by prenom asc");
  13. $req = $bdd->prepare("select * from tempons where noms like '%?'");
  14. $i = 0;
  15. while($prenom=$rep->fetch(PDO::FETCH_OBJ))
  16. {
  17.  
  18. $nom = $prenom->prenom;
  19. //$rep1 = $bdd->query("select * from tempons where noms like '%$nom%'");
  20. //time();
  21. while($data = $pre2->fetch())
  22. {
  23. time();//set_time_limit(60);//if ($data['noms'] != '' )
  24. //{
  25. $i = $i + 1;
  26. echo $i. ' - '.$prenom->prenom.'--'.$data['telephone'].' / '.$data['noms'].' / '.$data['agence'].' / '.$data['region'].'<br><br>';
  27. //$res = $bdd->prepare("insert into nom_chret values('',?,?,?,?)");
  28. //$res->execute(array($data['telephone'],$data['noms'],$data['agence'],$data['region']));
  29. //$ra = $bdd->exec("delete from tempons where noms like '$nom%'");
  30. //}
  31. }
  32. $pre2->closeCursor();
  33. }
  34. $rep->closeCursor();
  35. //or $data['noms'] != '' or $data['agence'] != '' or $data['region'] != ''
  36. ?>

et voici le message d'erreur
Fatal error: Call to a member function fetch() on a non-object in D:\wamp\www\sitenom\nom_arabes.php on line 14
24 Octobre 2013 18:38:35

C'est bon début, pense a fetch objet le deuxième while !
( et clear ton code ... car la on comprend plus rien avec les commentaire dans tous les sens ... )
la le code na aucun sens ...
voila un peut de doc sur les requête préparer : http://fr.openclassrooms.com/informatique/cours/pdo-int...

Bref on vera quand tu présentera un code lisible ( pense au balide [ code=PHP] [/code] )

Mais je pense a un retour null de la deuxième requête !!!

PS:
utilise les for pour introduire des variable conteur !
  1. for($i = 0; $data = $pre2->fetch(); i++){
  2. echo $i;
  3. }

http://php.net/manual/fr/control-structures.for.php
25 Octobre 2013 09:43:00

bon voici le tout dernier code que j'ai réalisé
  1. time();
  2. include("connexion/connexion.php");
  3. $rep = $bdd->query("select * from prenoms order by prenom asc");
  4. $req = $bdd->prepare("select * from tempons where noms like ?");
  5. $req1 = $bdd->prepare("select count(*) as nbre_noms from nom_chret where noms = ?");
  6. $i = 0;
  7. while($prenom=$rep->fetch(PDO::FETCH_OBJ))
  8. {
  9. $req->execute(array("$prenom->prenom%"));
  10. while($data = $req->fetch(PDO::FETCH_OBJ))
  11. {
  12. $req1->execute(array($data->noms));
  13. $dat = $req1->fetch();
  14. $val = $dat['nbre_noms'];
  15. $req1->closeCursor();
  16. if($val == 0)
  17. {
  18. $i = $i + 1;
  19. echo $i. ' - '.$prenom->prenom.'--'.$data->telephone.' / '.$data->noms.' / '.$data->agence.' / '.$data->region.'<br><br>';
  20. $res = $bdd->prepare("insert into nom_chret values('',?,?,?,?)");
  21. $res->execute(array($data->telephone,$data->noms,$data->agence,$data->region));
  22. $del = $bdd->exec("delete from tempons where noms = ".$data->noms."") ;
  23. }
  24. }
  25. $req->closeCursor();
  26. }
  27. $rep->closeCursor();
  28. ?>


la requette d'affichage est juste pour voir le taux d'execution du script,pareil pour le compteur.la partir prendre en consideration sont les selection,l'insertion et suppression
ma difficulte est l'imbrication des requettes
merci
25 Octobre 2013 16:41:46

A première vue tu n'a pas compris le principe des requêtes préparer ...
Pense a toujours fetch(PDO::FETCH_OBJ)
A tu vraiment besoin d’utilisé les closeCursor ? ( cela ralentie le temps d’exécution )

  1. $req = $bdd->prepare("select * from tempons where noms like ?");
  2. $req1 = $bdd->prepare("select count(*) as nbre_noms from nom_chret where noms = ?");
  3. $res = $bdd->prepare("insert into nom_chret values('',?,?,?,?)");
  4. $del = $bdd->prepare("delete from tempons where noms = ?") ;
  5.  
  6. $rep = $bdd->query("select * from prenoms order by prenom asc");
  7.  
  8. $i = 0;
  9. while($prenom=$rep->fetch(PDO::FETCH_OBJ))
  10. {
  11. $req->execute(array($prenom->prenom));
  12. while($data = $req->fetch(PDO::FETCH_OBJ))
  13. {
  14. $req1->execute(array($data->noms));
  15. $dat = $req1->fetch(PDO::FETCH_OBJ);
  16. if($dat->nbre_noms == 0) // ( pourquoi pas if(!$dat->nbre_noms) ?
  17. {
  18. $i = $i + 1;
  19. echo $i. ' - '.$prenom->prenom.'--'.$data->telephone.' / '.$data->noms.' / '.$data->agence.' / '.$data->region.'<br><br>';
  20. $res->execute(array($data->telephone,$data->noms,$data->agence,$data->region));
  21. $del->execute(array($data->noms));
  22. }
  23. }
  24. }


a tu une erreur avec ce code ?


(PS: pense a metre ton code entre les balises [code=PHP] [/ code] sur le forum ! )
25 Octobre 2013 18:36:44

j'ai constate que les prepare s'utilise plus hors des boucle car moi en general je ne m'en sert pas souvent pour ne pas dire jamais
le code n'affiche rien.bon j vais bosser ce soir et demain je te fait le fide back si tu es connecter
26 Octobre 2013 05:56:57

Bien au contraire !!!! Le prépare s'utilise justement dans les boucles !
Enfin tu prepare au début de ton script , et tu exécute dans la boucle ...
26 Octobre 2013 17:33:45

comme solution actuel que je voudrait adopter est d'individualiser les actions cad faire une boucle pour la selection, une pour la suppression tous cela en utilisant une table tempon et je croit que sa marche je vous balance le code d'ici lundi sinon je revien pleurer
hihi:pt1cable: 
27 Octobre 2013 01:20:19

Oula , non !

tu ne doit pas utilisé de table de tampon, cela fais beaucoup trop de requette a la base pour rien !
28 Octobre 2013 09:09:36

au fur et a mesure que j'arrangait mon code je me suis rendu compte que l'utilisation du like dans mes requettes me poussait a avoir une meme occurence plus de 5 voir pour certain 10 fois. jai ma table tempons juste pour faire un select distinct sur lui afin d'avoir mon resultat en unique.
voila la raison de mon tempons2.car dans lui j'inserres les données du like puis je faire un select distinct pour inserrer les resultat dans ma table final. cest sa mon idée,c'est vrai qu'elle est lourde en requette mais c'est la derniere solution a la quelle jai opter et qui a l'aire de marcher
29 Octobre 2013 00:08:28

J'arrive pas a comprendre ce que tu veux faire !
Mais tu doit éviter le plus possible de faire des requêtes dans ta base.
Php est un très bon langage qui support la POO, pourquoi ne pas l'utilisé ?

Une requête qui charge tous ( SELECT * FROM ) ensuite tous les traitement/recoupage/trie par php ?

29 Octobre 2013 09:30:49

voici mon code final, cest vrai qu'il presente encore des petits defaut mais sa va

  1. <?php
  2. time();
  3. include("connexion/connexion.php");
  4. $rep = $bdd->query("select * from prenoms order by prenom asc");
  5. $req = $bdd->prepare("select * from tempons where noms like ?");
  6. $res = $bdd->prepare("insert into tempons2 values(?,?,?,?)");
  7. while($prenom1=$rep->fetch(PDO::FETCH_OBJ))
  8. {
  9. $prenom = ' '.$prenom1->prenom;
  10. $req->execute(array("%$prenom"));
  11. while($data = $req->fetch(PDO::FETCH_OBJ))
  12. {
  13. $res->execute(array($data->telephone,$data->noms,$data->agence,$data->region));
  14. }
  15. }
  16. $res = $bdd->prepare("insert into noms_chret values(?,?,?,?)");
  17. $res2 = $bdd->query("select distinct * from tempons2 order by noms asc");
  18. while($val=$res2->fetch(PDO::FETCH_OBJ))
  19. {
  20. $res->execute(array($val->telephone,$val->noms,$val->agence,$val->region));
  21. }
  22. $chret = $bdd->query("select * from noms_chret");
  23. $del1 = $bdd->prepare("delete from tempons where noms = ?");
  24. while($t = $chret->fetch(PDO::FETCH_OBJ))
  25. {
  26. $del1->execute(array($t->noms));
  27. }
  28. $res1 = $bdd->query("select * from tempons");
  29. $musul = $bdd->prepare("insert into noms_musul values ('',?,?,?,?)");
  30. while($nom = $res1->fetch(PDO::FETCH_OBJ))
  31. {
  32. $musul->execute(array($nom->telephone,$nom->noms,$nom->agence,$nom->region));
  33. }
  34. echo 'fin script';
  35. ?>

cest vrai que sa fait trops de requetes mais sa va dans le sens de mes idees et de ce que je souhait faire
29 Octobre 2013 15:50:32

Mouai, enfin si derrière ta un vraie sysadmin qui passe tu vas te faire taper sur les doigts pour bourriner la bdd comme ça !
Vos mieux un bon gros Array qu'une suite de requête SQL !
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS