intval还是is_numeric? PHP

时间:2009-09-04 20:22:06

标签: php isnumeric

我从mysql数据库中获取文本,并通过URL中的ID获取它:

site.php?id = 1等等

什么被认为是最安全的防止SQL注入和东西。这样做是否正确:

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

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

//mysql_query and stuff here
?>

或者这样:

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

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

//mysql_query and stuff here
?>

5 个答案:

答案 0 :(得分:6)

为什么不使用预准备语句,这是处理sql注入攻击的正确方法。

但是,使用intval将字符串转换为整数,然后将其放入预准备语句中,您将受到保护,因为int值可能为零或负数,因此不会从查询中返回任何内容

答案 1 :(得分:3)

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

假设news_id为正(> 0)。

答案 2 :(得分:1)

如果使用intval,则无法使用news_id = 0,因为如果news_id不是数字,则intval将始终返回0。 在您的情况下,is_numeric更合适,更安全。

答案 3 :(得分:0)

is_numeric不是检查它的好方法,

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

intval不返回true或false。所以你不能像你写的那样使用它。 试试这个

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

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

答案 4 :(得分:0)

if (preg_match("/^[1-9]+\d*$/", $news_id)){
    // you're good to go
}