这不起作用: -
$query= "INSERT INTO `members`(`name`,`email`,`password`) VALUES('".mysqli_real_escape_string($link,$_POST['name'])."','".mysqli_real_escape_string($link,$_POST['email'])."','".$_POST['password']_hash("astkhlo",PASSWORD_DEFAULT)."')";
我正在使用xampp。它说
解析错误:语法错误,意外的'_hash'(T_STRING)
答案 0 :(得分:1)
您在错误的语法下使用了password_hash()
。
password_hash
- 创建密码哈希
password_hash()
使用强大的单向散列算法创建新的密码哈希。 password_hash()与crypt()兼容。因此,crypt()创建的密码哈希可以与password_hash()一起使用。
用以下内容替换您的插入查询:
方法一:
$query= "INSERT INTO `members`(`name`,`email`,`password`) VALUES('".mysqli_real_escape_string($link,$_POST['name'])."','".mysqli_real_escape_string($link,$_POST['email'])."','".password_hash($_POST['password'],PASSWORD_DEFAULT)."')";
方法二:
$name = mysqli_real_escape_string($link,$_POST['name']);
$email = mysqli_real_escape_string($link,$_POST['email']);
$password = password_hash($_POST['password'],PASSWORD_DEFAULT);
$query= "INSERT INTO `members`(`name`,`email`,`password`) VALUES('".$name."','".$email."','".$password."')";
这两种方法都会产生与预期相同的输出,但我们在方法二中将字符串转义为自身。
示例:强>
<?php
echo password_hash("rasmuslerdorf", PASSWORD_DEFAULT)."\n";
?>
输出:
$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a
注意:您的脚本在插入之前即使使用
SQL Injections
也容易受escape the strings
攻击。尝试使用prepared statements
,使其在普通查询中可以avoids the SQL Injection
。
答案 1 :(得分:1)
需要做类似下面的事情(一种更好的方法): -
$name = mysqli_real_escape_string($link,$_POST['name']);
$email = mysqli_real_escape_string($link,$_POST['email']);
$password = password_hash($_POST['password'],PASSWORD_DEFAULT);
$query= "INSERT INTO members(name,email,password) VALUES('".$name."','".$email."','".$password."')";
注意: -
您的脚本仍然容易受到SQL Injection
的攻击。</ p>
尝试学习prepared statements
以阻止SQL Injection
。感谢
答案 2 :(得分:1)
始终尝试编写友好的代码阅读器,并使用password_hash()作为密码。
password_hash()使用强大的单向散列算法创建新密码哈希。 password_hash()与crypt()兼容。因此,crypt()创建的密码哈希值可以与password_hash()一起使用。
$name_value = mysqli_real_escape_string($link,$_POST['name']);
$email_value = mysqli_real_escape_string($link,$_POST['name']);
$password_value =password_hash($_POST['password'],PASSWORD_DEFAULT);
$query= "INSERT INTO members(name,email,password)
VALUES('".$name_value."','".$email_value."','".$password_value."')";