2013-04-18 29 views
0

我使用傑米Rumbelow的MY_Model和添加功能需要,這樣它會包含一些附加數據。反引號不正確的SQL字符串

我看到了這篇文章,它幫我找到了它是什麼,我需要做到這一點,但我發現了一個SQL錯誤。有什麼不對的想法?

錯誤編號:1064

您的SQL語法錯誤;檢查手冊中 對應於你的MySQL服務器版本正確的語法使用FROM(titles) 接近」加入users ON titlescreator_id = usersuser_id「第2行

SELECT CONCAT_WS(' ', `users`.`first_name`, `users`.`last_name)` AS creator FROM (`titles`) JOIN `users` ON `titles`.`creator_id` = `users`.`user_id` 

public function with_creator() 
{ 
    $this->db->join('users', 'titles.creator_id = users.user_id'); 
    $this->db->select("CONCAT_WS(' ', users.first_name, users.last_name) AS creator"); 

    return $this; 
} 

當我使用傑米的MY_Model我使用下面的代碼。

// In controller 
$pages = $this->pages->with_creator()->get_all(); 

// In Model 
class Pages_m extends MY_Model 
{ 
public $_table = 'pages'; 
public $primary_key = 'page_id'; 

public function with_creator() 
    { 
     $this->db->join('users', 'pages.creator_id = users.user_id'); 
     $this->db->select("CONCAT_WS(' ', users.first_name, users.last_name) AS creator", FALSE); 

     return $this; 
    } 
} 

它現在只包括創建索引,並且不包括來自頁面自己的任何數據。

+3

'last_name'之後的第二個反引號位於右前方之外。 –

+0

我不確定這是爲什麼。 –

+0

這是錯的。 (認爲​​它可能是一個錯字) –

回答

3

這是CodeIgniter活動記錄/查詢生成器本身中的一個錯誤。這與傑米的基本模型無關。發生該錯誤的原因是SELECT字符串使用explode()進行細分,並以逗號作爲分隔符。由於函數中有逗號,因此在某些情況下會產生一些麻煩。

你有兩個選擇:

  1. 手動編寫查詢。你不使用查詢生成器所有的時間,特別是如果你只針對單一類型的數據庫(查詢生成器的一大特色是讓你的應用程序數據庫無關)。

  2. 告訴查詢生成器來逃脫不了特定SELECT電話。您可以通過兩種方式來實現:

數組語法:

$this->db->select(array("CONCAT_WS(' ', users.first_name, users.last_name) AS creator")); 

逃生參數:

$this->db->select("CONCAT_WS(' ', users.first_name, users.last_name) AS creator", FALSE); 

這個錯誤應該在CI 3.0被糾正時,它變得穩定。它尚未在dev版本中得到修復,但問題已知,只需要解決併合並。如果您有任何意見,請撥打you can contribute here

選擇問題:該查詢只返回creator concat結果,因爲這就是你所要求的。 get_all()方法不會自動選擇所有內容,這只是查詢構建器的標準默認值。一旦您指定了select()呼叫,它將使用該呼叫而不是默認的*

您應修改select()(或添加另一個)以確保正確調用其他列。

+0

雖然有一個額外的問題。檢查編輯。 –

+0

對不起,不知道你指的是什麼。我沒有看到任何新東西。 –

+0

現在檢查我的謝謝。 –

3

您的查詢有錯誤的地方進行反引號。像這樣修復:

SELECT CONCAT_WS(' ', `users`.`first_name`, `users`.`last_name`) AS creator 
FROM (`titles`) JOIN `users` ON `titles`.`creator_id` = `users`.`user_id` 
+0

$ this-> db-> select(「CONCAT_WS('',users.first_name,users.last_name')AS creator」);我仍然在某處丟失某些東西。 –

+0

現在你只需在last_name之後有一個報價。他們必須匹配。 –

+0

我一直在過去的一個小時裏嘗試了很多不同的東西。目前還沒有解決方案。 –

相關問題