关于你的mysqli_query
使用:
它比 mysql_ 方法更安全吗?(听说可以防止打针什么的)
在这里您没有注入问题,因为您不使用任何用户输入。所以 mysql_ ormysqli_
似乎是等价的。
关于注入问题:
但是,如果您必须使用用户输入(例如$_POST
或$_GET
变量),最好使用准备好的语句。他们的语法是这样的:
$query = SELECT * FROM mytable WHERE col1=? AND col2=?;
$stmt = $db->prepare($query);
$stmt->bind_param('ss',$_POST['col1'],$_POST['col2']);//I put 2 s because I want 2 params. s stands for strings, i for integer. For that part PHP and mysqli extension offers you two alternative syntaxes. They give the same result but it depends on what you understand the best.
第一:使用bind_result
. 该函数必须在执行前调用。它将您的结果绑定到您在参数中提供的变量。第一列将填写第一个变量,第二列填写第二个参数...主要问题是它会将您从具有fetch_all
,fetch_assoc
或fectch_object
.
$stmt->bindResult($array['col1'], $array['col2'], $array['col3']);
$stmt->execute();
while($stmt->fetch_assoc()){
var_dump($array);
}
第二:使用get_result
. 它允许您在mysqli_result
使用$db->query()
. 它仅在您使用 mysqlnd 作为驱动程序时可用。如果您使用的是 php 5.3+,这是默认驱动程序,但使用 php 5.1 或 5.2(基本上,1&1 hoster 低于 5.2)并不总是这样。
$stmt->execute();
$result = $stmt->get_result()->fetch_all();
foreach($result as $row){
//handle your rows
}
关于逃避:
mysql_real_escape_string(htmlspecialchars($string))
在 mysqli 中,您可以使用mysqli_real_escape_string
. htmlspecialchars
当涉及到数据库时,该功能是无用的。它仅用于展示。