Php 重复时,密钥更新错误

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)

当“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)
                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是一个字符串,因此需要对其进行封装。