Mysqli 支持预处理语句,可以防止 sql 注入攻击。它看起来像这样:
/* Create a prepared statement */
$stmt = $mysqli -> prepare("SELECT column FROM table WHERE name=?");
/* Bind parameters */
$stmt -> bind_param("s", $_POST['checkname']);
/* Execute it */
$stmt -> execute();
/* Bind results */
$stmt -> bind_result($result);
/* Fetch the value */
$stmt -> fetch();
echo $result;
查看手册了解更多信息。
快速总结,以回应评论:
在$stmt->prepare("...")
中,您正在形成您的查询,并且您使用“?”来保存您打算使用的任何变量的位置。
在$stmt -> bind_param(...)
中,您将变量绑定到它们相应的问号。第一个参数是类型,后面的参数是变量。如果您使用的是字符串和整数,则在括号内它看起来像"si", $stringVar, $intVar
在$stmt -> bind_result(...)
您说明您将结果绑定到什么时。如果查询是针对姓名和年龄,则括号内看起来像$name, age
在$stmt->fetch()
中,您正在获取结果。如果返回多行,您将执行以下操作:
while($stmt->fetch()) { //这里的代码 }
或者,您可以使用 PDO。它看起来像这样:
/* Create a prepared statement */
$stmt = $pdo->prepare("SELECT column FROM table WHERE name=:checkname");
/* Bind parameters */
$stmt->bindParam(':checkname', $_POST['checkname']);
/* Execute it */
$stmt->execute();
/* Fetch results */
$obj = $stmt->fetchObject();
echo $obj->column;
查看手册了解更多信息。