Je suppose que vous avez toujours besoin d'exécuter la requête quand votre IN
est vide ; par exemple avec LEFT JOIN ... ON ... AND IN ()
.
Comme vous construisez déjà dynamiquement le IN
dans la couche application, je traiterais le cas vide là-bas.
Voici un exemple de base en PHP
$condition = 'FALSE' // Could feasibly want TRUE under different circumstances
if($values){
$inParams = **dynamically generated IN parameters from $values**;
$condition = 'IN (' . $inParams . ')';
}
$sql = 'SELECT * FROM `user` WHERE '.$condition;
Si vous n'avez pas besoin d'exécuter la requête avec un fichier vide IN
alors ne le faites pas ; vous vous épargnerez un voyage à la base de données !
N.B. Au cas où vous ne le feriez pas déjà, je construirais/utiliserais une fonction qui va dans le sens inverse et qui lie dans votre IN
correctement, plutôt que de les concaténer brutalement dans le SQL. Cela vous donnera une certaine protection contre l'injection SQL si elle est utilisée sur des données brutes.