Php 第1行出现MySQL语法错误,反勾选提供奇数解决方案

Php 第1行出现MySQL语法错误,反勾选提供奇数解决方案,php,mysql,sql,registration,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 = $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;
    }
}
正在给我以下错误:

您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解使用接近“key,time”值('s)的正确语法example@domain.net1号线的“e1e4091197640bae0a4588b8666e87b6b”

但是上面的查询是有效的,只需添加一些背景标记(严重的重音):


有人能解释一下这个更改是如何解决这个问题的吗?

time
key
都是保留字。如果你想用它们作为列名,这是个坏主意,它们需要反勾号来转义。

试试这个-- 您不能使用这样的键,因为它是mysql的保留关键字。请在其周围使用平铺(`),以便将其作为字段

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

在MySQL中,只要标识符的名称是保留字,就需要反勾号。在您的情况下,
KEY
是保留字,除非您将其括起来,否则将导致语法错误。通常避免创建这样的名称是一个好主意


你可以找到一个保留字的列表。

哇,那真是太快了。我觉得这样做会很愚蠢。谢谢。:)关于
你是对的,但是
时间
可以不用反勾来使用。由于很多人使用它作为列名,MySQL允许使用它。
$queries[] = "INSERT INTO verification (
        email, 
        `key`, 
        time
    ) VALUES (
        '$email', 
        '$key', 
        $newTime
    )";