Php 重复时,密钥更新错误
当“Parse error:syntax error,unexpected T_VARIABLE”我只想更新数据库中存在的电子邮件时,我遇到了这个错误Php 重复时,密钥更新错误,php,mysql,sql,Php,Mysql,Sql,当“Parse error:syntax error,unexpected T_VARIABLE”我只想更新数据库中存在的电子邮件时,我遇到了这个错误 { $sql = 'INSERT INTO '._DB_PREFIX_.'newsletter (id_shop, id_shop_group, email, newsletter_date_add, ip_registration_newsletter, http_referer, active)
{
$sql = 'INSERT INTO '._DB_PREFIX_.'newsletter (id_shop, id_shop_group, email, newsletter_date_add, ip_registration_newsletter, http_referer, active)
VALUES
('.$this->context->shop->id.',
'.$this->context->shop->id_shop_group.',
\''.pSQL($email).'\',
NOW(),
\''.pSQL(Tools::getRemoteAddr()).'\',
ON DUPLICATE KEY UPDATE
email='$email',
(
SELECT c.http_referer
FROM '._DB_PREFIX_.'connections c
WHERE c.id_guest = '.(int)$this->context->customer->id.'
ORDER BY c.date_add DESC LIMIT 1
),
'.(int)$active.'
)
';
return Db::getInstance()->execute($sql);
}
您缺少一些句点,这会导致解析器翻转。更改此项:
email='$email',
为此:
email="'.$email.'",
也就是说,您不应该像这样简单地连接字符串来构建查询;它为你打开了通往成功的大门。您应该使用MySQLi或PDO,并使用准备好的语句来防止注入
email='$email',
应该是:
email=\''.$email.'\',
分析错误:语法错误,意外的T_变量。这意味着您的代码中有一个意外的变量。它甚至可能会告诉您粘贴错误的行号。这是一个PHP语法错误,通常由缺少分号引起。错误消息应该给您一个行号。看看这条线,看看上面的这条线是否缺少分号。事实上,这条线就在这里。。。email='$email',应该是email=\'.$email.'\',更正缺少的句点,但是由于email是一个字符串,因此需要对其进行封装。