Php mysql是数字sql注入

Php mysql是数字sql注入,php,mysql,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!");} } 请注意$q变量,如果post为空或c.id

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

$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!");}
}
请注意$q变量,如果post为空或c.id<'$in',它将没有值


它足够安全吗?

您可以随时累积参数,并按如下方式进行构建:

$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);
$query=“选择……其中`from`=?和`to`=?”;
$binds=数组(“ss”、&$from、&$to);
如果(isset($_POST[“inpi”])){
$query.=“和c.id<?”;
$$binds[0]。=“i”;
$binds[]=&$_POST[“inpi”];
}
$stmt=$mysqli->prepare($query);
调用_user_func_数组(数组($stmt,'bind_param'),$binds);
我还没有测试过这个,但它是基于,可能需要一些调整才能工作


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

如果您使用的是数字验证输入,那么我认为您不必担心这种情况下的sql注入。因为sql注入必须包含一些引号和字符串。您完全可以在这里使用准备好的语句。你在用PDO吗?您可以向查询字符串和用于同时保存值的
数组中添加一些内容。@tadman我正在使用mysqliPDO,这使它变得更容易,但是
mysqli
并不是不可能的难。这是一个。哦,太神奇了!非常感谢你的帮助,朋友!
$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);