我正在尝试为我的网站创建注册页面。我收到此错误,但字符串开始插入mysql服务器。
我收到以下错误消息:
错误:您的SQL语法出错;检查与您的MySQL服务器版本相对应的手册,以便在#"')附近使用正确的语法。在第1行
这是我的代码:
</style>
<body>
<div id="wrapper">
<h1>Register:</h1>
<br><br>
<form id="form" action="register_account.php" method="post">
User Name:
<br>
<input type="text" name="username" placeholder="username" ></input>
<br><br>
Password:
<br>
<input type="password" name="password" placeholder="password" ></input>
<br><br>
Re-type Password:
<br>
<input type="password" name="repassword"placeholder="repeat password" ></input>
<br>
<input type="submit" name="submit" value="Register"></input>
</form>
</div>
</body>
</html>
<?php
$username = $_POST['username'];
$password = $_POST['password'];
$repassword = $_POST['repassword'];
$con=mysqli_connect('localhost','root','root','secure_login');
mysql_select_db("secure_login", $con);
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$sql = mysqli_query($con,"INSERT INTO users (username, password) VALUES ('$username',$password')");
if (!mysqli_query($con,$sql)) {
die('Error: ' . mysqli_error($con));
}
echo "1 record added";
?>
同样,当我删除最后一个if语句时,整个页面都会变为空白。
答案 0 :(得分:1)
根据你给出的另一个答案留下的评论的外观(对于获得相同错误消息的效果),听起来你需要转义输入的数据,包括if(!mysqli_query($con,$sql))
这是一个促成因素。 - 请参见下文。
使用以下内容可以很好地解决问题。
$con=mysqli_connect('localhost','root','root','secure_login'); // place this first
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$username = stripslashes($_POST['username']);
$password = stripslashes($_POST['password']);
$repassword = stripslashes($_POST['repassword']);
$username = mysqli_real_escape_string($con,$_POST['username']);
$password = mysqli_real_escape_string($con,$_POST['password']);
$repassword = mysqli_real_escape_string($con,$_POST['repassword']);
...
$sql = mysqli_query($con,"INSERT INTO users (username, password) VALUES ('".$username."','".$password."')");
...
您还需要更改:
if (!mysqli_query($con,$sql)){...}
到
if (!$sql){...}
您使用mysqli_query
查询两次并连接两次,这是一个贡献因子,然后再次,它很可能是“你怀疑它是的理由。
关于密码存储
我还必须注意,以纯文本格式存储密码是不安全的。
最好使用CRYPT_BLOWFISH或PHP 5.5的password_hash()
功能。对于PHP&lt; 5.5使用password_hash() compatibility pack
并使用prepared statements。
正如我在评论中所述;
出于两个原因,您不需要此mysql_select_db("secure_login", $con);
。
1)您已经在选择数据库。 mysqli_connect('localhost','root','root','secure_login')
2)您正在混合MySQL API - 这是两个不同的API,它们不会混合在一起。
...以及$password
('$username',$password')
缺少引用的事实