intval veya is_numeric?

3 Cevap php

i mysql veritabanından bir metin getiriliyor ve i url KODU olsun:

böylece site.php? kimlik = 1 ve

SQL enjeksiyon ve malzeme önlemek için en güvenli olarak kabul edilir ne. Bu doğru bir yoldur:

<?php
$news_id = $_GET['news_id'];

if(!is_numeric($news_id)) die('Wrong');

//mysql_query and stuff here
?>

OR Bu yol:

<?php
$news_id = $_GET['news_id'];

if(!intval($news_id)) die('Wrong');

//mysql_query and stuff here
?>

3 Cevap

Neden sadece SQL enjeksiyon saldırıları ile başa çıkmak için doğru bir yoldur hazırlanmış deyimi, kullanmayın.

Ancak, bir tamsayı dize açmak için intval kullanın, ve sonra sadece hazırlanmış deyimi içine koymak ve int değer negatif bir sıfır olabilir veya gibi bu yüzden hiçbir şey sorgudan iade edilecektir, korunacaktır.

$news_id = (int)@$_GET['news_id'];
if ($news_id <= 0) die ('Wrong');

news_id pozitif olduğunu varsayarsak (> 0).

is_numeric, bunu kontrol etmek için iyi bir yol değildir

$number = "4"; // string ? int ?

intval doesn't return true veya false. so you can't use it like you wrote. try this one

if(intval($news_id) === (int)$news_id){
//code goes here
}

veya

if(intval($news_id) == $news_id){
//code goes here
}