Estoy construyendo una clase de base de datos y pensé que sería una buena idea incorporar algún tipo de prevención de inyección SQL (duh!). Aquí está el método que se ejecuta una consulta de base de datos:Impedir la inyección de SQL en una clase de base de datos
class DB
{
var $db_host = 'localhost';
var $db_user = 'root';
var $db_passwd = '';
var $db_name = 'whatever';
function query($sql)
{
$this->result = mysql_query($sql, $this->link);
if(!$this->result)
{
$this->error(mysql_error());
} else {
return $this->result;
}
}
}
Hay más en la clase que eso, pero estoy a cortarlo sólo para esto. El problema al que me enfrento es si solo uso mysql_real_escape_string($sql, $this->link);
, entonces escapa de toda la consulta y conduce a un error de sintaxis SQL. ¿Cómo puedo encontrar dinámicamente las variables que necesitan ser escapadas? Quiero evitar el uso de mysql_real_escape_string()
en mis bloques de código principales, prefiero tenerlo en una función.
Gracias.
Sé que dije esto en su publicación anterior, pero permítame repetir: Use PDO. Si usa PDO con sus declaraciones preparadas, ni siquiera tiene que preocuparse por escapar de ellas. – ryeguy
Utilice las especificaciones parametrizadas, use adodb o pdo. – rook