第1行的MySQL语法错误和反引号提供奇怪的解决方案

Ara*_*ram 4 php mysql sql registration

这个查询

$email = $mysqli->real_escape_string($_POST['email']); // User's email.
$key = RandomString(128); // A random string of 128 characters.
$newTime = $_SERVER['REQUEST_TIME'] + 1800; // Expiration timer.
$queries[] = "INSERT INTO verification (
        email, 
        key, 
        time
    ) VALUES (
        '$email', 
        '$key', 
        $newTime
    )";
$errors = false;

$mysqli->autocommit(false);
foreach ($queries as $query) {
    if (!$mysqli->query($query)) {
        $errors = true;
    }
}
Run Code Online (Sandbox Code Playgroud)

给我以下错误:

您的SQL语法有错误; 检查与您的MySQL服务器版本相对应的手册,以便在"密钥,时间"VALUES附近使用正确的语法('example@domain.net','e1e4091197640bae0a4588b8666e87b6b'在第1行.

但上面的查询有效,只需添加几个反引号(严重重音):

$queries[] = "INSERT INTO verification (
        `email`, 
        `key`, 
        `time`
    ) VALUES (
        '$email', 
        '$key', 
        $newTime
    )";
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释这种变化将如何解决这个问题?

Joh*_*nde 6

time并且key是保留字.如果你打算将它们用于列名,这是一个坏主意,它们需要反引号来逃避它们.