复制时,密钥更新错误

时间:2014-02-26 20:23:04

标签: php mysql sql

我在“解析错误:语法错误,意外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);
    }

2 个答案:

答案 0 :(得分:1)

您缺少一些句点,导致解析器翻转。改变这个:

email='$email',

到此:

email="'.$email.'",

那就是说,你不应该通过简单地连接像这样的字符串来构建查询;它打开你到SQL injection。您应该使用MySQLi或PDO并使用预准备语句来防止注入。

答案 1 :(得分:0)

email='$email',

应该是:

email=\''.$email.'\',