La única forma es escapar correctamente de los datos enviados por el usuario. Otros han señalado algunas formas de hacerlo.
Hay otra forma:declaraciones preparadas y marcadores de posición. Las declaraciones preparadas son compatibles con cada moderno Interfaz de base de datos PHP, incluido mysqli y PDO .
Usemos PDO como demostración. Digamos que queremos actualizar un poco de información en la tabla foo
enviado por un usuario.
$sql = 'UPDATE foo SET bar = ? WHERE user_id = ?';
$sh = $db->prepare($sql);
$sh->execute(array( $_POST['bar'], $_SESSION['user_id'] ));
Las variables en la matriz pasadas a execute
reemplace los marcadores de posición del signo de interrogación en la consulta. Cuando esto sucede, se escapan y citan automáticamente . ¡No necesita escaparlos manualmente para que sean seguros para ponerlos en la base de datos!
Por otro lado, aún deberá filtrarlos por contenido inesperado, como HTML, Javascript, letras donde espera números, etc. Hacer que los datos sean seguros para insertar en la base de datos es solo la mitad de la batalla .