Bienvenue sur PEBKAC.fr, le site qui recense les anecdotes où l’on se moque des utilisateurs ne maîtrisant pas l’outil informatique. PEBKAC est un acronyme signifiant « Problem Exists Between Keyboard And Chair ».SELECT COUNT(*) FROM <table> WHERE 1=1 AND ToolName LIKE '%test'%' db query failed.WHERE 1=1 dans la requête. Double PEBKAC.
WHERE 1 qui est largement suffisant.
1: $sql = 'SELECT * FROM matable where ';
2: for($i=0;$i<$foo;$i++){
3: $sql .= $_GET['champ_'.$i].' = '.$_GET['value_'.$i].($i<$foo -1 ? ' AND ':';');
4: }; 1: $sql = 'SELECT * FROM matable where ';
2: for($i=0;$i<$foo;$i++){
3: $sql .= $_GET['champ_'.$i].' = '.$_GET['value_'.$i]
4: if ($i<$foo -1)
5: $sql.= ' AND ';
6: };
WHERE/AND ;)$foo = 0 ta requête devient invalide.
1: $sql = 'SELECT * FROM matable where '; 2: for($i=0;$i<$foo;$i++) 3: $sql .= ($i==0 ? ' WHERE ':' AND ').$_GET['champ_'.$i].' = '.$_GET['value_'.$i];
1: $sql = 'SELECT * FROM matable';
2: for($i=0;$i<$foo;$i++){
3: if ($foo==0)
5: $sql.= ' WHERE ';
6: else
7: $sql.= ' AND ';
8: $sql .= $_GET['champ_'.$i].' = '.$_GET['value_'.$i]
9: };
WHERE 1=1peut être acceptable. Je prends le code suivant :Je me rend compte que la condition
champ1 = val1est inutile. Je mets donc la ligne 3 en commentaire, et tout marche bien. Si cette ligne avait commencé par unWHERE, la requête aurait été mal formée, et là, c'est le drame.Il peut aussi s'agir d'une requête crée par une boucle :
1: $sql = 'SELECT * FROM matable'; 2: $sql .= 'WHERE 1=1 '; 3: for($i=0;$i<$foo;$i++){ 4: $sql .= 'AND '.$_GET['champ_'.$i].' = '.$_GET['value_'.$i].' '; 5: };Et dans ce cas là mettre une première condition WHERE évite de devoir faire un truc du genre
1: $sql = 'SELECT * FROM matable'; 2: for($i=0;$i<$foo;$i++){ 3: if($i == 0) 4: $sql .= 'WHERE '.$_GET['champ_'.$i].' = '.$_GET['value_'.$i].' '; 5: else 6: $sql .= 'AND '.$_GET['champ_'.$i].' = '.$_GET['value_'.$i].' '; 7: };Dans ce cas là, la lisibilité est légèrement réduite.
Conclusion : même si c'est à priori bizarre, le
WHERE 1=1ne me dérange pas plus que ça.edit : j'ai gagné la médaille du commentaire le plus long ?