CI 묻고 답하기

제목 db 질문입니다.
글쓴이 수야디벨 작성시각 2012/11/02 14:30:20
댓글 : 7 추천 : 0 스크랩 : 0 조회수 : 16063   RSS

$this->db->where의 메뉴얼정의는 아래와 같더라구요.

$data = array(
               'title' => $title,
               'name' => $name,
               'date' => $date
            );

$this->db->where('id', $id);
$this->db->update('mytable', $data);

// 생성결과:
// UPDATE mytable
// SET title = '{$title}', name = '{$name}', date = '{$date}'
// WHERE id = $id


즉, $data 를 배열화해서 던져주면 , 그게 곧 SET title = 의 값이 된다는 뜻인데요..



제가 같은 DB를 2번건드립니다.

우선 , 한번은

$data = array(
     'b_no' => NULL,
     'userid' => 'zzonx',
     'station_no' => '2',
     'contents'=>NULL,
     'file_path'=>$name,
    );

이런식으로 정해서 DB에 틀을 잡아줘요 .($this->db->insert($data))
(contents 만 NULL이고, b_no는 autoincrement라서 저절로 값이 증가되면서 들어가네요)
(결과적으로 contents만 NULL 인상태가 됩니다.)

그리고나서

$dbdata = array(
     'contents' => $_POST['contents']
    );
    $this->load->model('ss/sss_model');
    $this->sns_model->db_update($dbdata);


이렇게 업데이트 치거든요 .

그러면 결과적으로 모든 필드에 값이 다 들어갑니다.

그런데 문제가 있어요.

update를 제어하는 문은 아래와 같습니다.

function db_update($data)
  {
   $this->db->where('userid','zzonx');
   $this->db->update('sss_table',$data);
   redirect('sns/sns_controller/index');
  }
 

이 소리는 userid가 zzonx인  sss_table에 값을 넣겠다는건데요.

위 기능이 게시판을 구현하기 위해서인데, 게시판의 글을 뽑아올때 db에서 뽑아오는데,

이래버리니까 같은 사용자의 db에 모두 글이 똑같이 들어가버리는거에요~

(예를들면 ..
 
 0  zzonx   2 개발시작  file_path  regedate  만 존재했따치면
또 글을 쓰게 되면

아래와같이 또 글을쓰게되면
 0  zzonx  2 개발시작하네요  file_path  regedate 
 1 zzonx  2  개발시작하네요 file_path regdate  처럼

기존에 0 번이였던 것도 아이디가 zzonx 이므로 똑같이 덮어져 버립니다.



해결방법이 없을까요?



제가 생각한 방법으로는 , b_no의 값을 뽑아와서,

이를 위에서 명시한 ,

function db_update($data)
  {
   $this->db->where('userid','zzonx');
   $this->db->update('sss_table',$data);
   redirect('sns/sns_controller/index');
  }

에서 $this->db->where('b_no',$b_no); 처럼 조건을 한번 더 주면 될거같은데,

b_no를 뽑아와서 , $data 배열과 같이 값을 넘기는걸 모르겠습니다.ㅠ

왜냐면 $data 를 배열화해서 던져주면 , 그게 곧 SET title = 의 값이 된다는 뜻이니까, 함부로 배열에 포함을
못시키겠어요 값을 ..


조언부탁드려요 ㅠ
 다음글 모델 로딩시 질문 (2)
 이전글 배열 넘기기 질문..... (5)

댓글

헛발이 / 2012/11/02 14:53:58 / 추천 0
//$data에 이렇게 들어갔다고 가정한다면..
$data = array(
     'title' => $title,
     'name' => $name,
     'date' => $date
);

//모델에서
function register($data=NULL, $contents=NULL)
{
     if (is_null($data)) return NULL;

     if ($this->db->insert('테이블명', $data))
     {
          $insert_id = $this->db->insert_id();

          $this->db->set('contents', $contents);
          $this->db->where('id', $insert_id);
          if ($this->db->update('테이블명'))
          {
               return true;
          }
     }
     return NULL;
}
이렇게 하면 되지 않을까 하는데요...
레코드 번호는 자동추가되면 배열에 값이 없어도 됩니다.


근데 왜 한번에 해도 되는 작업을 두번에 걸쳐서 하는지 의문입니다...
그냥 한번에 다음과 같이도 되는데요...

//$data에 이렇게 들어갔다고 가정한다면..
$data = array(
     'title' => $title,
     'name' => $name,
     'contents' => $contents,
     'date' => $date
);

//모델에서
function register($data=NULL)
{
     if (is_null($data)) return NULL;

     if ($this->db->insert('테이블명', $data))
     {
          return true;
     }
     return NULL;
}


수야디벨 / 2012/11/02 15:11:15 / 추천 0

헛발이 //

음 .. 소스가 되게 커서 그런거 같아요.

변수를 유들리하게 컨트롤 하지 못하니까,

한 funcion 단위로 끊어 버렸네요 ㅠ

그런데 헛발이님의 소스가 이해가 안됩니다.

$contents 는 왜 갑기 나온거지요?

수야디벨 / 2012/11/02 15:12:28 / 추천 0

insert_id(); 라는 function이 있는건가요~?

헛발이 / 2012/11/02 15:24:43 / 추천 0
$contents는 따로 전달 받는 의미로 해 놓은건데요..
전달 하는 방법이야 본인에게 맞게 하시면 되구요...


원래 PHP에서는 mysql_insert_id 로 명령이 있구요..
ci에서도 $this->db->insert_id() 가 존재합니다.

http://codeigniter-kr.org/user_guide_2.1.0/database/helpers.html

여기를 한번 참조 하세요~

수야디벨 / 2012/11/02 15:31:46 / 추천 0
헛발이 //

아하 그렇군요~

그러면 아이디번호를 삽입해주는데, 1부터 하나씩 증가되는건가요그럼?
헛발이 / 2012/11/02 15:34:33 / 추천 0
그쵸  auto_increment 라면 자동이니깐요..
1부터 자동으로 들어갈거에요..
수야디벨 / 2012/11/02 15:38:39 / 추천 0

헛발이//

답변감사합니다^^