2012-11-20 4 views
1

어떤 이유로이 SQL 문이 작동하지 않습니다. 아무도 그 이유를 말할 수 있습니까? 여기 왜이 MySQL INSERT가 CI에서 작동하지 않습니까?

내 모델 (즉 중요한 경우는 CodeIgniter의 사이트입니다)

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

또한 MySQL 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; 
} 

당신은 탈출 기능을 사용할 수 있습니다.
EDIT :
$ this-> db-> escape()는 변수 주위에 따옴표를 추가하므로 오류가 다시 발생합니다.

+0

이것은 문제 일 가능성이 있습니다 - 저는 PDO를 사용하여 MySQL에서 필드 이름을 바인드 할 수 있다고 생각지 않습니다. – sgroves

+0

확인. 나는 CI 사용자 가이드에서 쿼리 바인딩 예제를보고 있었고 필드 이름도 같은 방식으로 접근 할 수 있다고 생각했습니다. –

+0

오, 오 ... 난 당신의 코드를 너무 빨리도 말을 내가이 오류를 오류 번호를 얻을 수 : 1054 \t \t 알 수없는 열 ''필드 목록 'SET \t \t UPDATE 사용자' '에서'FIRST_NAME ''first_name'' = 'OOO'WHERE ID = '151' \t \t 파일 이름 : /Applications/MAMP/htdocs/NOIR_FINAL/models/member_model.php \t \t 줄 번호 : 45 따옴표는 아직 거기에,하지만 난을 전달하고 변수 확실히 견적 무료입니다. (first_name에는 backticks 안에 작은 따옴표가 있습니다.그것은 이상하게 해석되고 있습니다.) –

관련 문제