2012-11-20 74 views
1

由於某種原因,此SQL語句不起作用。誰能告訴我爲什麼? (這是一個笨網站,如果該事項)爲什麼這個MySQL INSERT不能在CI中工作?

這裏是我的模型(在我的錯誤是指向我)

public function edit_profile($ID, $field, $new_info) 
{ 
    $sql = "UPDATE users SET ?=? WHERE id=?"; 
    $query = $this->db->query($sql, array($field, $new_info, $ID)); // <<<< LINE 42 
    return $query; 
} 

這是我得到

Error Number: 1064 
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''first_name'='oooo' WHERE id='151'' at line 1 
UPDATE users SET 'first_name'='oooo' WHERE id='151' 
Filename: /Applications/MAMP/htdocs/MY_SITE/models/member_model.php 
Line Number: 42 
錯誤

我的表被稱爲「用戶」,我有一個'first_name'和'id'列。

想法?

編輯

只是因爲它似乎要拿出一點我要澄清的是,我路過這裏的變量有不帶引號或反引號。他們被添加到某處(並且它似乎是 - >查詢方法,但我無法想象這是真的?..但是不知道,因爲它是我的第一個CI項目)

以下是傳遞給模型的控制器。 ..

public function profileEdit() 
{ 
    $ID = $this->the_user->id; 
    $field = $this->input->post('edit_field') 
    $field = strstr($field,'_edit', true); 
    $new_info = $this->input->post('new_info'); 

    $this->load->model('Member_model'); 
    if($this->Member_model->edit_profile($ID, $field, $new_info)){ 
     echo 'success'; 
    } 
    else 
    { 
     echo 'error'; 
    } 
} 
+2

「first_name」周圍的引號正在打破您的查詢 –

+0

@JohnConde我認爲這可能是一個報價問題。但是我並沒有把它們放在那裏,變量被動態地分配,並且在這個過程中加入了引號。什麼是更好的方式來做我想要的? –

+0

在sintax中的整數也不能被quetes包圍(即'WHERE id = 151') – Epsil0neR

回答

4

我建議使用這樣的:

public function edit_profile($ID, $field, $new_info) 
{ 
    $sql = "UPDATE users SET $field =? WHERE id=?"; # UPDATED (remove $this->db->escape()) 
    $query = $this->db->query($sql, array($new_info, $ID)); // <<<< LINE 42 
    return $query; 
} 

如果$場沒有固定,你可以使用轉義功能。
編輯:
$ this-> db-> escape()將在變量周圍添加引號,以便您將再次收到錯誤。

+0

這可能是問題所在 - 我不相信你可以使用PDO在MySQL中綁定字段名稱。 – sgroves

+0

好的。我正在查看CI用戶指南中的查詢綁定示例,我認爲字段名稱可以用相同的方式處理。 –

+0

哦,哦。我用你的代碼說話太快,即使我得到這個錯誤 錯誤編號:1054 \t \t未知列「在「字段列表」 \t \t更新用戶設置的''」 FIRST_NAME'first_name'' = ''000' WHERE ID = '151' \t \t文件名:/Applications/MAMP/htdocs/NOIR_FINAL/models/member_model.php \t \t行號:45 的行情仍然存在,但我傳遞變量絕對是免費的。 (first_name上面有反引號內的單引號..它會被奇怪地解釋。) –

相關問題