A única maneira é escapar adequadamente dos dados enviados pelo usuário. Outros apontaram algumas maneiras de fazê-lo.
Há outra maneira:declarações preparadas e marcadores de lugar. As declarações preparadas são suportadas por todos os modernos Interface de banco de dados PHP, incluindo mysqli e PDO .
Vamos usar o PDO como demonstração. Digamos que queremos atualizar alguns dados na tabela
foo
enviado por um usuário. $sql = 'UPDATE foo SET bar = ? WHERE user_id = ?';
$sh = $db->prepare($sql);
$sh->execute(array( $_POST['bar'], $_SESSION['user_id'] ));
As variáveis no array passadas para
execute
substitua os marcadores de posição de ponto de interrogação na consulta. Quando isso acontece, eles são automaticamente escapados e citados . Você não precisa escapá-los manualmente para torná-los seguros para colocar no banco de dados! Por outro lado, você ainda precisará filtrá-los para conteúdo inesperado, como HTML, Javascript, letras onde você espera números, etc. Tornar os dados seguros para inserir no banco de dados é apenas metade da batalha .