제목 | database update query 중에 date 부분 질문입니다 | ||
---|---|---|---|
글쓴이 | ryuppp | 작성시각 | 2012/12/14 12:03:56 |
|
|||
자바만 하다가 이제 막 CI 시작한 초보입니다. db업뎃에 관해 질문드립니다. 제가 model의 function에서 date_deadline 이라는 DATE 형태의 자료를 update하려고 합니다. 아래와 같은 코드로 작성했는데요, 주어진 name과 part로 where에 따라 테이블 안의 자료 위치도 잘 찾아서 업뎃을 하긴 하는데 그 값이 0000-00-00 (yyyy-mm-dd)식으로 모두 0으로만 업데이트됩니다. 에러메세지는 없구요. 원래 $new_due_date은 받아올때 Dec 25 2012 식으로 되어 있어서 아래처럼 strtotime을 사용해서 2012-12-25 식으로 바꿨습니다. 도움될만한 조언을 부탁드립니다. (참고로 맨 아래 주석처리한 echo는 해보면 new_due_date도 2012-12-25 이런식으로 잘 나옵니다. name, part도 물론 정확하구요, 상황은 테이블이 총 3개인데 첫번째에서 id를 가져와서 두번째에서 그걸 써서 다시 다른id를 찾아서 마지막 테이블의 한 부분을 업뎃하는 경우입니다.) public function update_new_due_date ($new_due_date = null, $name = null, $part = null)
{
if($new_due_date === null || $name === null || $part === null)
{
throw new Exception("No new_due_date given");
}
$program_emphasis_id = $this->db->select('id')
->from('program_emphasis')
->where('name', $name)
->get()->result_array();
$conceptual_application_term_id = $this->db->select('id')
->from('conceptual_application_term')
->where('program_emphasis_id', $program_emphasis_id[0]['id'])
->get()->result_array();
$this->db->set('date_deadline', date('Y-m-d', strtotime($new_due_date)), FALSE); //여기가 문제인듯 합니다.
$this->db->where('conceptual_application_term_id', $conceptual_application_term_id[0]['id']);
$this->db->where('part', $part);
$this->db->update('conceptual_application_part_deadline');
// echo date('Y-m-d', strtotime($new_due_date));
// echo $name;
// echo $part;
}
감사합니다. |
|||
다음글 | [초보] JOIN문 질문이요 (4) | ||
이전글 | 파일 업로드 mime 문제 (2) | ||
milosz
/
2012/12/14 12:10:07 /
추천
0
|
ryuppp
/
2012/12/14 12:13:10 /
추천
0
아!!! milosz님, 감사합니다. 되는데요!! 제가 아무 생각없이 검색하다가 자연스레 FALSE를 넣었는데...
저도 좀 더 공부해보겠습니다만, 혹시 왜 그부분이 문제인지 간단하게라도 알려주실수 있을까요? 감사드립니다. ^^ |
milosz
/
2012/12/14 12:34:37 /
추천
0
액티브레코드에서 보안을 위해서 따옴표 등을 escape하기도 하고 `으로 자동으로 감싸기도 하는 등 착한짓(?)을 하도록 되어 있는데 false를 지정해야 하는 경우가 종종 있습니다. 가령 다른 필드값을 이용할 때에는 문자열이 되면 안되니까요. 예를 들면 date_deadline 필드의 값을 created_date 필드 값을 이용하고 싶을 때 $this->db->set('date_deadline', 'created_date'); 로 입력하면 `date_deadline` = 'created_date' 가 되어 문자열로 저장을 하려 할겁니다. 이런 경우에 사용하죠. $this->db->set('date_deadline', 'created_date', false); 일반적인 경우는 코드이그나이터가 알아서 잘 하는데 가끔 특수한 경우가 있습니다. 위 예시는 false 안해도 정상 동작할지도 모릅니다... 안써서 가물가물 하네요 -_;
|
ryuppp
/
2012/12/15 04:24:19 /
추천
0
친절하게 알려주셔서 감사합니다, milosz님.
메뉴얼만 보다가 이렇게 보니 훨씬 더 와닿게 이해가 되는군요. |
false 빼면 어떤 결과가 나오나요?