在MySQL查询中替换和设置

时间:2019-03-11 08:47:36

标签: mysql

根据w3resource ,您可以使用REPLACE关键字替换文本。

现在看看从OpenCart提取的这段代码

<?php
class ModelToolOnline extends Model {
    public function addOnline($ip, $customer_id, $url, $referer) {
        $this->db->query("DELETE FROM `" . DB_PREFIX . "customer_online` WHERE date_added < '" . date('Y-m-d H:i:s', strtotime('-1 hour')) . "'");

        $this->db->query("REPLACE INTO `" . DB_PREFIX . "customer_online` SET `ip` = '" . $this->db->escape($ip) . "', `customer_id` = '" . (int)$customer_id . "', `url` = '" . $this->db->escape($url) . "', `referer` = '" . $this->db->escape($referer) . "', `date_added` = '" . $this->db->escape(date('Y-m-d H:i:s')) . "'");
    }
}
?>

它们具有用SET关键字替换查询,并且没有WHERE条件。现在,在任何地方都找不到类似的东西来了解此查询中发生的事情。

如果有人知道此查询中发生了什么,请使用真实的源链接进行解释

1 个答案:

答案 0 :(得分:1)

那是两件事。有一个REPLACE() function和一个REPLACE statement

在代码中使用REPLACE语句。它类似于INSERT语句,因此没有WHERE子句。

这是文献所述的内容:

  

REPLACE的工作原理与INSERT完全相同,不同之处在于,如果   表具有与PRIMARY KEYUNIQUE的新行相同的值   索引,则在插入新行之前删除旧行。