在另一个中使用prepare语句是否正确?

时间:2017-06-12 07:13:37

标签: php mysql mysqli

我决定尝试mysqli::prepare,我想知道在我做的另一次准备中使用prepare是否有效:

$stmt = $mysqli->prepare('SELECT mail FROM members WHERE id = ?') or die($mysqli->error);
$stmt->bind_param('i', $db['id']);

$db['id'] = $_SESSION['id'];

$stmt->execute();
$stmt->store_result();
$stmt->bind_result($db['mail']);

if($stmt->num_rows === 1) {
    $stmt->fetch();

    $stmt = $mysqli->prepare('UPDATE members SET pass = ? WHERE id = ?') or die($mysqli->error);
    $stmt->bind_param('si', $db['pass'], $db['id']);

    $db['pass'] = $data['pass'];
    $db['id']   = $_SESSION['id'];

    $stmt->execute();
    echo 'Your password has been changed';
}

$stmt->close();

我仍然没有理解为什么使用prepare而不仅仅是query更好。我的意思是,如果我需要获取输入,并在提交之前清除它(删除标签和不允许的特殊字符以及MySQL SELECTWHERE等...),有什么区别?

1 个答案:

答案 0 :(得分:0)

SQL注入是在将数据绑定到查询之前准备数据的原因。你没有注射问题,这就是你不能看到不同的原因。 当您将用户输入的数据提交到数据库时,始终使用prepare语句,这样您就不必担心转义单个字符串。 用户可以输入类似" myUser //?"这可以使您的查询忽略queryString的某些部分。 例: 如果您的网站需要用户名和密码,用户可以输入 用户名字段中的-james //?在密码字段上 这可以使您的查询忽略密码字段。