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():
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 $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){ // nexiste pas traitement; } else{ // existe traitement; }
J'étais aussi tenté par rowCount() sur un SELECT (code plus court à écrire - pas sûr de la validité le l'argument
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{ //nexiste pas traitement; }), 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![]()
Partager