2011-12-05 11 views
6

jest bezpieczne używać cast (int) zamiast uciekać?

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

należy używać parametrów. – SLaks

+0

Ponieważ są pozornie nie używając go jako ciąg w kontekście SQL, uciekając go '_escape_string 'nie byłoby użyteczne – mario

Odpowiedz

13

mysql_real_scape_string jest STRINGS. nie spowoduje, że liczba całkowita będzie "bezpieczna" do użycia. na przykład

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

nie zrobi nic, gdzie

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

bo nie ma metaznaki SQL tam. zapytanie zakończy się coś

SELECT ... WHERE somefield = 0 = 0 

jednak robi intval() konwertuje że 0=0 do zwykłego 0.

+2

Dokładnie.' (int) $ value' jest bezpieczne, ale trzeba pamiętać, że istnieją efekty uboczne, takie jak '(int)" 5abc "=== 5'. Tak więc należy sprawdzić, czy dany ciąg jest * tylko * liczbą, na przykład używając 'ctype_digit()'. – apfelbox

+0

Nie zgodziłbym się ... ponieważ ktoś może przekazywać ciąg znaków, gdy oczekiwano liczby całkowitej ... jest o wiele bezpieczniej używać go ze wszystkimi parametrami. –

-3

Tak to jest bezpieczne, ale należy uciec wartość w zapytaniu ..where opinionid = '$ opinionid'”

BTW (1) Nigdy nie używać SELECT * Rozwiązanie Wybierz pole, Pole2 .. ..

(2) (int) $ foo jest mniejsza perfomanter następnie intval ($ foo)

+0

Jak pamiętam, intval() jest wolniejszy niż (int) (mikro-ulepszenie, które zwykle nie jest warte wysiłku, ponieważ różnica jest niewidoczna dla oka). –

Powiązane problemy