Bonsoir,

Je profite d'une insomnie pour me faire un code type (bien sûr, il s'insèrera à terme dans une méthode objet).
Toutes les questions que je me pose (elles sont nombreuses) sont dans les commentaires du code.
Je suis impatiente d'avoir votre expertise sur la question...
Merci d'avance

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
<?php
function selectFruits($dbh,$calories,$couleur){
	//J'ai toujours besoin de savoir si la requête retourne au moins un tuple
	$sql0='SELECT count(id)
	FROM fruit
	WHERE calories < :calories 
	AND couleur = :couleur';
 
	//requête préparée dès le comptage
	$sth = $dbh->prepare($sql0, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));//suis pas sûre que c ce qu'il faut mettre ds le 2nd paramètre ici
	if($sth->execute(array(':calories' => $calories, ':couleur' => $couleur))){
		$res = $dbh->query($sql0);
		if ($res->fetchColumn() > 0) { 
			$res=NULL;
			$sql = 'SELECT nom, couleur, calories
			FROM fruit
			WHERE calories < :calories AND couleur = :couleur';
 
			//ici peut-on se passer des bind_param qui seraient redondants ?
			/*$stmt=$dbh->prepare($sql);
			$stmt->bindParam(':calories', $calories);
			$stmt->bindParam(':couleur', $couleur);
			if($stmt->execute(array(':calories' => $calories, ':couleur' => $couleur))){
			*/
			$data=array();
			$stmt = $dbh->prepare($sql));
			while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){
				array_push($data,$row);
			}
			return $data;
		}
		else{
			return 0;
		}
	}
	else{
		return false;//en espérant que le bloc try & catch gère le msg d'erreur sql 
	}
}
//peut-on mettre ainsi un bloc try & catch dans la page appelante, et se passer du bloc dans les méthodes ?
//avec la portabilité des variables, ici externalisées de la fonction, j'ai des gros doutes...
try {
	$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
	$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
	$data=selectFruits($dbh,130,'jaune');
 
	$dbh = null;
 
	if(is_array($data)){
		echo '<pre>';
		print_r($data);
		echo '</pre>';
	}
	elseif($data==0){
		echo 'Aucun fruit avec ces critères';
	}
}
catch (PDOException $e) {
	echo $e->getMessage() . "<br/>";
}
?>