2011-12-05 11 views
6

¿Es seguro usar cast (int) en lugar de escapar?

class opinion 
{ 
    function loadbyopinionid($opinionid){ 
     $opinionid=(int)$opinionid; 
     mysql_query("select * from fe_opinion where opinionid=$opinionid"); 
     //more code 
    } 
} 
+3

debe utilizar parámetros. – SLaks

+0

Puesto que usted está aparentemente no usando como cadena dentro de contexto de SQL, escapando con '_escape_string 'no sería útil. – mario

Respuesta

13

mysql_real_scape_string es para CUERDAS. no hará un número "seguro" para su uso. p.ej.

$safe = mysql_real_escape_string($_GET['page']); 

no hará nada en

$_GET['page'] = "0 = 0"; 

porque no hay meta-caracteres en SQL allí. la consulta terminaría algo así como

SELECT ... WHERE somefield = 0 = 0 

Sin embargo, hacer intval(), convierten dicho 0=0 en una llanura 0.

+2

Exactamente.' (int) $ value' es seguro, pero hay que tener en cuenta que hay efectos secundarios como '(int)" 5abc "=== 5'. Entonces uno debe validar, que la cadena dada es * solo * un número, por ejemplo usando 'ctype_digit()'. – apfelbox

+0

No estaría de acuerdo ... porque alguien puede pasar cadena donde se esperaba un número entero ... es mucho más seguro usarlo con todos los parámetros. –

-3

Sí que es seguro, pero debe escapar el valor de la consulta ..where opinionid = '$ opinionid'"

Por cierto (1) Nunca utilice Select * Solución Seleccionar campo, Campo2 .. ..

(2) (int) $ foo es menos perfomanter continuación intval ($ foo)

+0

Como recuerdo, intval() es más lento que (int) (micro-mejora que generalmente no vale la pena el esfuerzo, ya que la diferencia es invisible para el ojo). –

Cuestiones relacionadas