kontas Photographe amateur daltonien | 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 :
- $nomTableTemp = "test_".time();
- // PDO
- $conn = new conn;
- $pdo = $conn->newCon('');
- // req 1
- $queryPos = "SELECT count(utilisateur_idutilisateur) FROM ".$nomTableTemp." WHERE rank BETWEEN :rangDebut AND :rangFin";
- $prep = $pdo->prepare($queryPos);
- $rangDebut;
- $rangFin;
- $prep->bindParam(':rangDebut', $rangDebut, PDO::PARAM_INT);
- $prep->bindParam(':rangFin', $rangFin, PDO::PARAM_INT);
- // REQ 2
- $queryPrime = "INSERT INTO table (val1,val2,val3,val4,val5,val6,val7,val8,val9,val10)
- VALUES (:val1,NOW(),0,NOW(),:val2,:val3,:val4,'',:val5,:val6)";
- $prepPrime = $pdo->prepare($queryPrime);
- $val1;
- $val2;
- $val3;
- $val4;
- $val5;
- $val6;
- $prepPrime->bindParam(':val1', $val1, PDO::PARAM_INT);
- $prepPrime->bindParam(':val2', $val2, PDO::PARAM_STR);
- $prepPrime->bindParam(':val3', $val3, PDO::PARAM_INT);
- $prepPrime->bindParam(':val4', $val4, PDO::PARAM_INT);
- $prepPrime->bindParam(':val5', $val5, PDO::PARAM_STR);
- $prepPrime->bindParam(':val6', $val6, PDO::PARAM_STR);
- // Fin préparation requêtes
- // Création d'une table temporaire
- $query = " CREATE TABLE ".$nomTableTemp." SELECT * FROM uneautreTable";
- $result = mysqli_query($link, $query) or die(mySqlMailError($query." ".mysqli_error($link)));
- $query = "SELECT * FROM ".$nomTableTemp;
- $result = mysqli_query($link,$query ) or die(mySqlMailError($query." ".mysqli_error($link)));
- deconnexionV3($link);
- // Début d'un While sur 65000 enregistrement
- while($dataMatrice = mysqli_fetch_array($result )){
- // Creation des variables pour la requêtes préparé
- $rangDebut = "un calcul";
- $rangFin = "un autre calcul";
- // Execution de la première requête
- try{
- $prep->execute();
- if($prep->rowCount()==1){
- $dataP = $prep->fetch();
- }
- }
- catch(PDOException $e){
- $retour = FALSE;
- exit('<b>Catched exception at line '. $e->getLine() .' :</b> '. $e->getMessage());
- }
- // Un controle de résultat de la requete préparé N1
- if($dataP['valeur']!='0'){
-
- try{
- $prepPrime->execute();
- }
- catch(PDOException $e){
- exit('<b>Catched exception at line '. $e->getLine() .' :</b> '. $e->getMessage());
- }
-
- }// Fin controle valeur
- } // Fin du While
- $link = connexionV3('');
- $sqlDrop = "DROP TABLE ".$nomTableTemp;
- $reqDrop = mysqli_query($link,$sqlDrop) or die(mySqlMailError($sqlDrop." ".mysqli_error($link)));
- deconnexionV3($link);
- //Clore la requête préparée
- $prep->closeCursor();
- unset($prep);
- $prepPrime->closeCursor();
- unset($prepPrime);
|
Message édité par kontas le 24-06-2015 à 18:13:37
|