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 ) . '\'';
}