La inyección SQL es un tipo de vulnerabilidad muy común y relativamente sencilla de explotar (que me lo digan a mi). Se origina por una incorrecta gestión de las variables de entrada empleadas para construir nuestras consultas SQL.
PHP ofrece una función específica para prevenir este inconveniente mysql_real_escape_string() que básicamente se encarga de escapar todos los caracteres especiales de una cadena para su uso en una sentencia SQL.
$val = $_POST["txtId"]; $val = mysql_real_escape_string($val); $sql = "SELECT * FROM tbl WHERE id = $val";