0

以下是我的代码: 注意:CONNECTDATA 是有效数据,出于安全原因替换。

$con = mysqli_connect(CONNECTDATA);
    // Check connection
if (mysqli_connect_errno($con))
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }
        $username = mysql_real_escape_string($_POST["username"]);
        $email = mysql_real_escape_string($_POST["email"]);
        $igname = mysql_real_escape_string($_POST["gamename"]);
        $pass = crypt($_POST["password"]);
        if(!mysqli_query($con, "INSERT INTO users (username, email, igname, password) VALUES ($username, $email, $igname, $pass)")){
            die('Error' . mysqli_error($con));
        }

我是 SQL 新手,这是一个学习实验项目,我收到此错误:ErrorYou have an error in your SQL syntax; 检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '@mail.com, alphabravo, $1$dg1.iu3.$oZIgB6gFwjAcywv/zadG3/)' 附近使用正确的语法

我不明白我的语法有什么问题,非常感谢帮助。

4

4 回答 4

4

发生这种情况的原因是因为您必须引用您的字符串值,例如

INSERT INTO users (username, email, igname, password) VALUES ('$username', '$email', '$igname', '$pass')

更好的是使用准备好的语句来防止 SQL 注入并否定使用的需要mysqli_real_escape_string

$con = mysqli_connect(CONNECTDATA);
...
$stmt = mysqli_prepare($con, "INSERT INTO users (username, email, igname, password) VALUES (?, ?, ?, ?)");
mysqli_stmt_bind_param($stmt, 'ssss', $username, $email, $igname, $pass);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
于 2013-05-08T12:39:20.210 回答
0

正如 andrewsi 在评论中所说,在将字符串发送到数据库时需要使用引号。

所以你的sqlquery应该是:

if(!mysqli_query($con, "INSERT INTO users (username, email, igname, password) VALUES ('$username', '$email', '$igname', '$pass')")){

如果要传递 INTEGER(或其他数值),则不需要使用引号(只要数据库字段也是数字)。

于 2013-05-08T12:38:02.643 回答
0

您的 SQL 语法错误。
必须始终引用转义字符串。必须使用适当的转义功能。

$username = mysqli_real_escape_string($con, $_POST["username"]);
$email = mysqli_real_escape_string($con,$_POST["email"]);
$igname = mysqli_real_escape_string($con,$_POST["gamename"]);
$pass = mysqli_real_escape_string($con,crypt($_POST["password"]));

$sql = "INSERT INTO users (username, email, igname, password) 
      VALUES ('$username', '$email', '$igname', '$pass')"
mysqli_query($con, $sql) or trigger_error($con->error);
于 2013-05-08T12:38:39.733 回答
0

不要与 混合mysqlimysql将其与mysqli

$username = mysqli_real_escape_string($_POST["username"]);
$email = mysqli_real_escape_string($_POST["email"]);
$igname = mysqli_real_escape_string($_POST["gamename"]);

编辑

像这样使用准备好的语句

if(($stmt = mysqli_prepare($con, "INSERT INTO users (username, email, igname, password) 
VALUES (?,?,?,?)"))) {
    /* bind parameters for markers */
    mysqli_stmt_bind_param($stmt, "s", $username);
    mysqli_stmt_bind_param($stmt, "s", $email);
    mysqli_stmt_bind_param($stmt, "s", $igname);
    mysqli_stmt_bind_param($stmt, "s", $pass);

    /* execute query */
    mysqli_stmt_execute($stmt);
}
于 2013-05-08T12:35:04.267 回答