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);