mysql语法错误/ php页面变成空白

时间:2014-08-14 15:41:41

标签: php mysql sql

我正在尝试为我的网站创建注册页面。我收到此错误,但字符串开始插入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语句时,整个页面都会变为空白。

1 个答案:

答案 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查询两次并连接两次,这是一个贡献因子,然后再次,它很可能是“你怀疑它是的理由。

  • 咨询Marc B给出的this answer,其中说明了类似问题的发生情况。他的解释将阐明这个问题。

关于密码存储

我还必须注意,以纯文本格式存储密码是不安全的。

最好使用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')缺少引用的事实