使用MySQL函数SUBSTRING_INDEX的CodeIgnite Active Record set方法

时间:2017-01-03 08:45:53

标签: php mysql codeigniter

这是我工作的MySQL查询:

$this->db->query("UPDATE `ea_appointments` 
SET `id_services` = SUBSTRING_INDEX(`notes`, '|', -1), 
`id_users_customer` = SUBSTRING_INDEX(SUBSTRING_INDEX(`notes`, '|', 2), '|', -1), 
`hash` = MD5(`id_google_calendar`) 
WHERE `is_unavailable`= 1 AND `notes` LIKE '%|%'");

这是我第一次尝试将其转换为Codigniter的Activerecord / Query Builder格式

$this->db->set("id_services","SUBSTRING_INDEX(notes, '|', -1)");
$this->db->set("id_users_customer","SUBSTRING_INDEX(SUBSTRING_INDEX(notes, '|', 2), '|', -1)");
$this->db->set("hash","MD5(id_google_calendar)");
$this->db->where("is_unavailable= 1");
$this->db->where("notes LIKE '%|%'");
$this->db->update("ea_appointments");

这看起来是否正确?问题是,有了它,它不会在MySQL所在的管道之间拉出数据。我在MySQL中使用SUBSTRING_INDEX,我应该使用PHP等价吗?

2 个答案:

答案 0 :(得分:0)

在解决CI查询问题时,请确保在数据库设置中设置了save_queries选项(至少在dev。上),然后使用echo $ this-> db-> last_query()。这是开始排除故障的好地方。

CI转移可能会让您陷入困境。尝试将转义设置为FALSE。 例如。

$this->db->set("id_services","SUBSTRING_INDEX(notes, '|', -1)",FALSE);

您可以在文档here中阅读相关内容。

此外,where条款存在问题:

$this->db->where("is_unavailable= 1");
$this->db->where("notes LIKE '%|%'");

应该是:

$this->db->where("is_unavailable",1)
     ->like('notes','|');

如果您想使用单一评估,最好做一些像

这样的事情
$this->db->where("is_unavailable= 1",NULL,FALSE);

答案 1 :(得分:0)

请改为以下

$this->db->set("id_services","SUBSTRING_INDEX(notes, '|', -1)", false);
        $this->db->set("id_users_customer","SUBSTRING_INDEX(SUBSTRING_INDEX(notes, '|', 2), '|', -1)", false);
$this->db->set("hash","MD5(id_google_calendar)", false);
$this->db->where("is_unavailable= 1");
$this->db->where("notes LIKE '%|%'");
$this->db->update("ea_appointments");

它会起作用,但我认为应该在哪里改变

$this->db->where("is_unavailable", 1);
$this->db->like("notes", '|', 'both');