0

我正在尝试使用 MySQL 数据库注册用户。我已将问题缩小到这段代码。

$query = "INSERT INTO `Users`(`User`, `Pass`, `Email`, `RegKey`, `KeyList`, `ID`, `UserType`) VALUES ([".$user."],[".$pass."],[".$email."],[".$regkey."],[''],[". $NumUsers + 1 ."],['Default'])";
$result = mysqli_query($con,$query);
if($result != false){
        //Successfully created the user
        mysqli_free_result($result);
        $query = "UPDATE Keys SET Paid=1
        WHERE Key='".$regkey."'";
        $result = mysqli_query($con,$query);
        mysqli_free_result($result);
        header('Location: '.$website.'register.php?success');
} else{
    //Failed to create the user
    mysqli_free_result($result);

    header('Location: '.$website.'register.php?e3');
}

有人可以帮我弄清楚我的 PHP 出了什么问题吗?我已经查找了所有内容,我认为这与查询结果有关,但我不确定。

更新:

我编辑了查询,我相信它遵循 mysql 语法,但我仍然收到错误

更新了 $query

$query = "INSERT INTO Users(User, Pass, Email, RegKey, KeyList, ID, UserType) VALUES ('".$user."','".$pass."','".$email."','".$regkey."','',". $NumUsers + 1 .",'Default')";

更新 2:

修复了 Sql 查询,但我仍然遇到同样的问题......

固定查询:

$query = "INSERT INTO `Users`(`User`, `Pass`, `Email`, `RegKey`, `KeyList`, `UserType`) VALUES ('".$user."','".$pass."','".$email."','".$regkey."','','Default')";
4

2 回答 2

1

你的INSERT说法是错误的。如果您没有参数化该值,则数据类型为字符串(包括日期)的值必须用单引号括起来,而不是用括号括起来。例如:

INSERT INTO tableName(strCol, dateCol, intCol) 
VALUES ('string value', '2013-01-01 00:00:00', 0)

作为旁注,如果变量的值来自外部,则查询很容易受到SQL 注入攻击。请查看这篇文章以了解如何防止它。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。

于 2013-04-01T01:43:49.117 回答
0

我同意这很容易发生 SQL 注入。但我认为这里的问题是您正在尝试插入ID. 现在,如果是,IDauto_increment您不需要在查询中插入或包含它。

另一件事,查询本身不正确。由于这是在 PHP5 中,您应该使用 PDO 或 MySQLi。

试试这个

$query = "INSERT INTO `Users`(`User`, `Pass`, `Email`, `RegKey`, `KeyList`, `UserType`) VALUES ('".$user."','".$pass."','".$email."','".$regkey."','','Default')";
于 2013-04-01T02:21:10.607 回答