mysql is_numeric sql注入

时间:2016-05-04 21:32:57

标签: php mysql

我的网页上有一个分页。所以如果我有一个来自分页的帖子,我想在我的查询中添加一行:

$q="";
if(isset($_POST["inpi"])){
    $in = $_POST["inpi"];
    if(is_numeric($in)){
        $q = "and c.id < '$in'"; // add this to mysql
    }
    else{die("something is wrong!");}
}

所以我不能在这里使用准备陈述。

select k.user, c.id, c.from, c.sent, c.message, c.recd from chat c
inner join cadastro k on c.from=k.id
where `from`=? and `to`=? $q

注意$ q变量,如果post为空或者和c.id&lt;它将没有值。 &#39; $在&#39;

安全吗?

1 个答案:

答案 0 :(得分:2)

您可以随时累积参数并按照以下方式构建:

$query = "SELECT ... WHERE `from`=? AND `to`=?";
$binds = array("ss", &$from, &$to);

if (isset($_POST["inpi"])) {
  $query .= " AND c.id < ?";

  $$binds[0] .= "i";
  $binds[] = &$_POST["inpi"];
}

$stmt = $mysqli->prepare($query);

call_user_func_array(array($stmt, 'bind_param'), $binds);

我没有对此进行测试,但它基于this code,可能需要进行一些调整才能正常工作。

PDO的execute()函数直接array,它更容易使用。