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
)";