Mysql
 sql >> Base de données >  >> RDS >> Mysql

Formater un tableau PHP pour une clause SQL IN

Il existe un meilleur moyen

Vous mentionnez dans les commentaires que vous utilisez CodeIgniter. À moins que vous ne fassiez quelque chose d'extraordinairement compliqué, il n'y a aucune raison pratique de créer vos propres requêtes maison lorsque vous avez where_in intégré.

Et si cela ne fonctionne pas, alors il y a du bon vieux escape .

OK, donc, la plupart des gens disent que vous devez citer les articles et vous donnent ceci :

function createInClause($arr)
{
    return '\'' . implode( '\', \'', $arr ) . '\'';
}

mais ce n'est vraiment pas suffisant si vous avez la possibilité d'une entrée douteuse (telle que '); DROP TABLE STUDENTS; -- . Pour vous protéger contre cela, vous devez vous assurer de vérifier Injection SQL :

function createInClause($arr)
{
    $tmp = array();
    foreach($arr as $item)
    {
        // this line makes sure you don't risk a sql injection attack
        // $connection is your current connection
        $tmp[] = mysqli_escape_string($connection, $item);
    }
    return '\'' . implode( '\', \'', $tmp ) . '\'';
}