Bonjour,
Je cherche à déterminer si une ligne existe ou non dans une table (pas besoin de connaître le nombre de fois ou elle existe, pas besoin non plus d'en récupérer les données).
J’obtiens le résultat attendu de deux manières. Laquelle me conseillez-vous? Ou y-a-t-il mieux à faire?

Option COUNT():
Code PHP : 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
 
$reqCount = <<<SQL
	SELECT COUNT(*)
	FROM table        
	WHERE table.colonne1 = ?
		    AND table.colonne2 = ?;
SQL;
try{
	$stmtCount = $db->prepare($reqCount) ;
	$stmtCount -> bindParam (1, $col1,PDO::PARAM_STR);
	$stmtCount -> bindParam (2, $col2,PDO::PARAM_STR);
	$stmtCount -> execute()
	$resCount = $stmtCount -> fetch();
 
	if (intval($resCount["COUNT(*)"])==0){
		// n’existe pas traitement;
		}
	else{
		// existe traitement;
                }
Option EXISTS()
Code PHP : 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
 
$reqExist = <<<SQL
	SELECT *
	FROM table
	WHERE EXISTS (
		SELECT *
		FROM table
		WHERE table.col1 = ?
		            AND table.col2 = ?
                );
SQL;
 
try{
	$stmtExist = $db->prepare($reqExist) ;
	$stmtExist -> bindParam (1, $col1,PDO::PARAM_STR);
	$stmtExist -> bindParam (1, $col2,PDO::PARAM_STR);
	$stmtExist -> execute()
	$resExist = $stmtExist -> fetch();
 
	if ($resExist<>FALSE){
		//existe traitement;
		}
	else{
		//n’existe pas traitement;
	        }
J'étais aussi tenté par rowCount() sur un SELECT (code plus court à écrire - pas sûr de la validité le l'argument ), mais la doc semble le déconseiller…?

Question subsidiaire, les tests :
if (intval($resCount["COUNT(*)"])==0){} (ligne 15 pour COUNT)
et
if ($resExist<>FALSE){}(ligne 20 pour EXISTS)
sont-ils écrit proprement? Je n’y suis arrivé qu’après de nombreux tâtonnements

Merci pour vos conseils