Devemos cuidar das vulnerabilidades de injeção de SQL e de uma condição vazia . Eu vou lidar com ambos como abaixo.
Para uma matriz numérica pura, use a conversão de tipo apropriada viz intval
ou floatval
ou doubleval
sobre cada elemento. Para tipos de string mysqli_real_escape_string()
que também podem ser aplicados a valores numéricos, se desejar. O MySQL permite números, bem como variantes de data, como string .
Para escapar adequadamente dos valores antes de passar para a consulta, crie uma função semelhante a:
function escape($string)
{
// Assuming $db is a link identifier returned by mysqli_connect() or mysqli_init()
return mysqli_real_escape_string($db, $string);
}
Provavelmente, essa função já estará disponível para você no seu aplicativo ou talvez você já tenha criado um.
Desinfete a matriz de strings como:
$values = array_map('escape', $gallaries);
Uma matriz numérica pode ser higienizado com intval
ou floatval
ou doubleval
em vez como apropriado:
$values = array_map('intval', $gallaries);
Finalmente, crie a condição de consulta
$where = count($values) ? "`id` = '" . implode("' OR `id` = '", $values) . "'" : 0;
ou
$where = count($values) ? "`id` IN ('" . implode("', '", $values) . "')" : 0;
Como o array também pode estar vazio às vezes, como $galleries = array();
devemos observar, isso IN ()
não permite uma lista vazia. Também se pode usar OR
, mas o problema permanece. Portanto, a verificação acima count($values)
, é garantir o mesmo.
E adicione-o à consulta final:
$query = 'SELECT * FROM `galleries` WHERE ' . $where;
DICA : Se você deseja mostrar todos os registros (sem filtragem) no caso de uma matriz vazia, em vez de ocultar todas as linhas, substitua 0 por 1 na parte falsa do ternário.