Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1352 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Accélération d'un ensemble de requêtes via Pdo et préparation

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Accélération d'un ensemble de requêtes via Pdo et préparation

n°2261105
kontas
Photographe amateur daltonien
Posté le 24-06-2015 à 18:13:00  profilanswer
 

Bonjour à tous,

 

J'ai une tache Cron pour une application Web en php qui dure 30min en mysqli. En fouillant le net j'ai cru comprendre que l'utilisation de requêtes préparé permet d'accélérer le traitement, je suis donc passé sur du PDO avec des requêtes préparées et le traitement ne dure plus que 19min !

 

Après vérification les données enregistrés semblent OK, mais j'aurais aimé avoir votre avis sur le principe de mon script, si j'ai rien oublié, ou si, il y'a des choses à revoir, car je ne maitrise pas encore PDO ^^, merci beaucoup

 
Code :
  1. $nomTableTemp = "test_".time();
  2. // PDO
  3. $conn = new conn;
  4. $pdo  = $conn->newCon('');
  5. // req 1
  6. $queryPos  = "SELECT count(utilisateur_idutilisateur) FROM ".$nomTableTemp." WHERE rank BETWEEN :rangDebut AND :rangFin";
  7. $prep   = $pdo->prepare($queryPos);
  8. $rangDebut;
  9. $rangFin;
  10. $prep->bindParam(':rangDebut', $rangDebut, PDO::PARAM_INT);
  11. $prep->bindParam(':rangFin', $rangFin, PDO::PARAM_INT);
  12. // REQ 2
  13. $queryPrime = "INSERT INTO table (val1,val2,val3,val4,val5,val6,val7,val8,val9,val10)
  14.   VALUES (:val1,NOW(),0,NOW(),:val2,:val3,:val4,'',:val5,:val6)";
  15. $prepPrime = $pdo->prepare($queryPrime);
  16. $val1;
  17. $val2;
  18. $val3;
  19. $val4;
  20. $val5;
  21. $val6;
  22. $prepPrime->bindParam(':val1', $val1, PDO::PARAM_INT);
  23. $prepPrime->bindParam(':val2', $val2, PDO::PARAM_STR);
  24. $prepPrime->bindParam(':val3', $val3, PDO::PARAM_INT);
  25. $prepPrime->bindParam(':val4', $val4, PDO::PARAM_INT);
  26. $prepPrime->bindParam(':val5', $val5, PDO::PARAM_STR);
  27. $prepPrime->bindParam(':val6', $val6, PDO::PARAM_STR);
  28. // Fin préparation requêtes
  29. // Création d'une table temporaire
  30. $query = " CREATE TABLE ".$nomTableTemp." SELECT * FROM uneautreTable";
  31. $result = mysqli_query($link, $query) or die(mySqlMailError($query." ".mysqli_error($link)));
  32. $query  = "SELECT * FROM ".$nomTableTemp;
  33. $result = mysqli_query($link,$query ) or die(mySqlMailError($query." ".mysqli_error($link)));
  34. deconnexionV3($link);
  35. // Début d'un While sur 65000 enregistrement
  36. while($dataMatrice = mysqli_fetch_array($result )){
  37. // Creation des variables pour la requêtes préparé
  38. $rangDebut = "un calcul";
  39. $rangFin = "un autre calcul";   
  40.      // Execution de la première requête
  41. try{
  42.  $prep->execute();
  43.      if($prep->rowCount()==1){
  44.   $dataP = $prep->fetch();
  45.    }
  46. }
  47. catch(PDOException $e){
  48.  $retour = FALSE;
  49.  exit('<b>Catched exception at line '. $e->getLine() .' :</b> '. $e->getMessage());
  50. }
  51. // Un controle de résultat de la requete préparé N1
  52. if($dataP['valeur']!='0'){
  53.              
  54.  try{
  55.   $prepPrime->execute();
  56.       }
  57.        catch(PDOException $e){
  58.            exit('<b>Catched exception at line '. $e->getLine() .' :</b> '. $e->getMessage());
  59.       }
  60.    
  61.      }// Fin controle valeur
  62. } // Fin du While
  63. $link     = connexionV3('');
  64. $sqlDrop = "DROP TABLE ".$nomTableTemp;
  65. $reqDrop  = mysqli_query($link,$sqlDrop) or die(mySqlMailError($sqlDrop." ".mysqli_error($link)));
  66. deconnexionV3($link);
  67. //Clore la requête préparée
  68. $prep->closeCursor();
  69. unset($prep);
  70. $prepPrime->closeCursor();
  71. unset($prepPrime);


Message édité par kontas le 24-06-2015 à 18:13:37
mood
Publicité
Posté le 24-06-2015 à 18:13:00  profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Accélération d'un ensemble de requêtes via Pdo et préparation

 

Sujets relatifs
paralleliser mes requetes SQLConnexion PDO. construct, ou singleton ?
equivalence mysql_escape_string en PDOConvertir moteur recherche mysql_ en PDO
Aide:extraire un groupe de données depuis un groupe de fichiersscript pour requêtes
script pour requêtesPDO et procédure stockée SQL Server
Remplacer Access (bdd, requêtes, formulaires) vers du WEBFonctions avec requetes en base MySQL
Plus de sujets relatifs à : Accélération d'un ensemble de requêtes via Pdo et préparation


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR