2012-11-26 77 views
0

我正面臨CodeIgniter數據庫查詢的語法問題。無法弄清楚什麼是錯的。CodeIgniter查詢語法錯誤

$query = $this->db->query(" 
    INSERT IGNORE INTO ".$table." (email, lang, ip_address) 
    VALUES (".$this->db->escape($_POST['email']).", ".$this->db->escape($lang).", ".$this->input->ip_address().")"); 

我也在尋找一種方式來輸出什麼樣的查詢看起來像曾經的佔位符被替換,因爲我使用CodeIgniter調試選項有點困惑。

回答

0

使用

echo $this->db->last_query(); 

檢索拼命地跑查詢。

然後檢查查詢是否格式良好。

0

要知道您傳遞給您的數據庫的查詢。使用下面的語句並將數據插入到數據庫中。請按照以下步驟操作。

echo $this->db->last_query(); 

    $data = array(
      'email' => $this->db->escape($_POST['email']), 
      'lang' = > $this->db->escape($lang), 
      'ip_address' => $this->input->ip_address(), 
    ); 

Call your model function $this->model->insert_function_name($data); 

Your model function in your model file 
public function insert_function_name($data) 

    { 
     $this->db->insert($table_name,$data); 
    return $this->db->insert_id(); 
    } 
2

它看起來好像你沒有逃避你試圖輸入到數據庫中的字符串。您發佈的查詢會評估如下:

$query = $this->db->query(" 
    INSERT IGNORE INTO table_name (email, lang, ip_address) 
    VALUES ([email protected], en, 192.168.0.1) 
"); 

這會引發錯誤,因爲VALUES中的字符串未正確轉義。而不是你正在運行的查詢,你應該使用類似於:

$query = $this->db->query(" 
    INSERT IGNORE INTO ".$table." (email, lang, ip_address) 
    VALUES ('".$this->db->escape($_POST['email'])."', '".$this->db->escape($lang)."', '".$this->input->ip_address()."') 
"); 

注意每個字符串周圍的新'字符。

+1

+1你也可以使用mysql_real_escape_string() – toxicate20

+0

感謝喬丹,那個作品。 –

0

試試這個:您查詢是缺少單引號字符串類型,如電子郵件,郎值和IP

$query = $this->db->query(" 
    INSERT IGNORE INTO ".$table." (email, lang, ip_address) 
    VALUES ('".$this->db->escape($_POST['email'])."', '".$this->db->escape($lang)."', '".$this->input->ip_address()."')"); 
+0

是的,它的作品! –

+0

好,如果你認爲這是正確的答案,請選擇它作爲答案。 –