参数化查询

时间:2010-12-21 14:05:08

标签: php mysqli

请问这段代码安全吗?

/* Create a new mysqli object with database connection parameters */
$mysqli = new mysql('localhost', 'username', 'password', 'db');

if(mysqli_connect_errno()) {
echo "Connection Failed: " . mysqli_connect_errno();
exit();
}

/* Create a prepared statement */
if($stmt = $mysqli -> prepare("SELECT priv FROM testUsers WHERE username=?
AND password=?")) {

/* Bind parameters
s - string, b - boolean, i - int, etc */
$stmt -> bind_param("ss", $user, $pass);

/* Execute it */
$stmt -> execute();

/* Bind results */
$stmt -> bind_results($result);

/* Fetch the value */
$stmt -> fetch();

echo $user . "'s level of priviledges is " . $result;

/* Close statement */
$stmt -> close();
}

/* Close connection */
$mysqli -> close();

3 个答案:

答案 0 :(得分:8)

就防止mySQL注入而言:是的。 Mysqli的参数化查询可以安全地防止注入攻击。

如果$user来自外部来源,您可能需要添加htmlentities() echo语句,以防止用户使用<script>(some malicious code)</script>等用户名注册

答案 1 :(得分:3)

呼叫本身是安全的。您可能希望将此$mysqli = new mysql('localhost', 'username', 'password', 'db');放在公共Web目录之外的单独文件中。

答案 2 :(得分:1)

除了Pekka的评论之外:还在echo语句中对$ result使用htmlspecialchars。