以下代码仅声明了一个包含MySQL查询的字符串变量:
$sql = "INSERT INTO users (username, password, email) VALUES ('".$_POST["username"]."','".$_POST["password"]."','".$_POST["email"]."')";
它不执行查询。为此,您需要使用一些功能,但让我先解释一下其他内容。
永远不要信任用户输入 :永远不要将用户输入(例如来自
$_GET或的表单输入
$_POST) 直接
附加到查询中。有人可以以这种方式小心地 *** 作输入,以免对您的数据库造成严重损害。这就是所谓的SQL注入。
为了保护您的脚本免受此类攻击,您 必须 使用预处理语句。在这里更多关于准备好的陈述
将准备好的语句包括在您的代码中,如下所示:
$sql = "INSERT INTO users (username, password, email) VALUES (?,?,?)";
请注意如何将
?用作值的占位符。接下来,您应该使用
mysqli_prepare以下语句准备语句:
$stmt = mysqli_prepare($sql);
然后开始将输入变量绑定到准备好的语句:
$stmt->bind_param("sss", $_POST['username'], $_POST['email'], $_POST['password']);
最后执行准备好的语句。(这是实际插入的地方)
$stmt->execute();
注意 尽管不是问题的一部分,但我强烈建议您不要以明文形式存储密码。相反,您应该使用
password_hash存储密码的哈希值
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)