在注册脚本中,错误会不断弹出。代码是这样的:
try {
$dbh = new PDO("mysql:host=$hostname;dbname=booter", $username, $password);
echo 'Connected to database<br />';
/*** INSERT data ***/
$count = $dbh->exec("INSERT INTO members(username, password, email) VALUES ('$_POST['username']', '$hashedpassword', '$_POST['email']')");
/*** close the database connection ***/
$dbh = null;
}
catch(PDOException $e)
{
echo $e->getMessage();
}
对此的任何修复(以及任何有助于安全性的提示)都将非常感激。
答案 0 :(得分:2)
问题在于这一行:
('$_POST['username']', '$hashedpassword', '$_POST['email']')
这是POST数组中需要删除的引号。
但是,这根本不安全,你应该使用准备好的陈述,因为它让你对SQL injection开放。
首先为POST数组分配变量:
$username = $_POST['username'];
$hashedpassword = "The way you're getting this from";
$email = $_POST['email'];
然后使用?
为占位符准备的语句:
$query= "INSERT INTO members (username, password, email) VALUES (?, ?, ?)";
$result = $dbh->prepare($query);
$count = $result->execute(array($username, $hashedpassword, $email));
有关PDO预备陈述的更多信息,请访问:
脚注:
我在发布https://stackoverflow.com/q/29177454/的另一个问题中注意到您正在使用mysqli_
个功能。
如果您仍在使用mysqli_
连接或代码中其他地方存在mysqli_
函数,则无法混合MySQL API。