Bonjour à tous,

J'ai une tache Cron pour une application Web en php qui dure 30min en mysqli car il y'a beaucoup de ligne en base. 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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
$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);