Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Formatando um array PHP para uma cláusula SQL IN

Há uma maneira melhor


Você menciona nos comentários que está usando o CodeIgniter. A menos que você esteja fazendo algo extraordinariamente complicado, não há nenhuma razão prática para você criar suas próprias consultas caseiras quando você tem where_in construídas em.

E se isso não funcionar, então existe o bom e velho escape .

OK, então, você tem a maioria das pessoas dizendo que você precisa citar os itens e está dando a você isso:
function createInClause($arr)
{
    return '\'' . implode( '\', \'', $arr ) . '\'';
}

mas isso realmente não é suficiente se você tiver a possibilidade de entrada questionável (como '); DROP TABLE STUDENTS; -- . Para se proteger contra isso, você precisa verificar se há injeção de 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 ) . '\'';
}