2017-01-03 61 views
0

這是我的工作MySQL查詢:CodeIgnite活動記錄集的方法

$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的/查詢生成器格式

$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

? – Ghost

+0

是的,它不會分離管道之間的數據。我不確定錯誤在哪裏。 –

回答

0

當故障排除CI查詢,確保該save_queries選項在數據庫設置中設置(至少在開發),然後使用echo $這個 - > 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); 
+0

謝謝,將escape設置爲FALSE不會。管道分隔符的原因是Google日曆不給我們提供自定義字段來保存。我有一些需要預約的代碼,這是我能看到的唯一工作。不過,它適用於SQL,但不適用於Active Record格式(尚)。我嘗試使用這個http://jigarjain.com/blog/saving-all-db-queries-in-codeigniter/查詢日誌記錄,但在運行後我沒有看到記錄。 –

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');