此查询
$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服务器版本对应的手册,以便在“密钥,时间”VALUES附近使用正确的语法('example@domain.net','e1e4091197640bae0a4588b8666e87b6b'在第1行。
但上面的查询有效,只需添加一些反引号(严重重音):
$queries[] = "INSERT INTO verification (
`email`,
`key`,
`time`
) VALUES (
'$email',
'$key',
$newTime
)";
任何人都可以解释这种变化如何解决这个问题吗?
答案 0 :(得分:6)
time
和key
是保留字。如果你打算将它们用于列名,这是一个坏主意,它们需要反引号来逃避它们。
答案 1 :(得分:4)
KEY
是一个保留字,会导致语法错误,除非您将其包含在内。避免创建这样的名称通常是个好主意。
您可以找到保留字here的列表。
答案 2 :(得分:1)
试试这个 - 你不能使用这样的密钥,因为它是mysql的保留关键字。在它周围使用tild(`),以便将它作为字段。
$queries[] = "INSERT INTO verification (
email,
`key`,
time
) VALUES (
'$email',
'$key',
$newTime
)";