这是我工作的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等价吗?
答案 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');