CI 묻고 답하기

제목 CI 입문자입니다 도와주세요~ㅠㅠㅠ
글쓴이 할랭보 작성시각 2010/03/05 16:06:05
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 26304   RSS
간단하게 mysql로 db에 연동하는 프로그램을 만들고 있는데요~
결과값이 잘 안나와 이렇게 질문드립니다. 답변 주시면 많은 도움이 될 것 같습니다.


//controller
<?php
class Test_theater extends Controller{

    function Test_theater()
    {
        parent::Controller();       
        $this->load->database();
    }
   
    function index()
    {
        echo "함수가없을때";       
    }
    function theater_list(){
        $this->load->model("table_list");
        $query=$this->table_list->get_tbl_list();
        $res=$query->result_array();
        $this->load->view("list_v",$res);
    }
}
?>


//model
<?php
class Table_list extends Model{
   
    function Table_list(){
        parent::Model();
        $this->load->database();
    }
    /*function index(){
        echo 'model aaa';   
    }    */
   
    function get_tbl_list(){
        $sql="select * from theater_m where theater_type='A'";
        $res = $this->db->query($sql);
        return $res;
    }
}
?>

뷰에서 $res가 나오질 않네요 쿼리부분에서 잘못된거같은데 좀 도와주세요

 다음글 [초급]matchbox에 관한 질문 (2)
 이전글 [초중급] 404페이지에 값보내기... (4)

댓글

변종원(웅파) / 2010/03/05 16:27:36 / 추천 0
일단 $this->load->database(); 이 라인이 컨트롤러에도 있고 모델에도 있네요.
컨트롤러에서만 선언해주시면 됩니다.

그리고 매뉴얼(또 이야기하지만)을 좀더 보셔야 할 것 같습니다.
위의 get_tbl_list()는 mysql_query()까지만 한 상태입니다.
결과를 뽑아오려면 mysql_fetch_array()를 해줘야 결과가 나오겠죠?
ci에서는 $res = $this->db->query($sql); 다음 라인에
$result = $res->result(); 를 추가하셔야 합니다.

그리고 위와 같이 일반 php에서 사용하는 sql문으로 쿼리를 날리는 방식을 사용하면
좋은 툴을 놔두고 사용하지 않는 것과 같습니다.
ci에는 액티브레코드라는 것이 있고 사용하게 되면 sql injection을 자동으로 막아줍니다.
(위 함수는 sql문에 escape처리를 해주셔야 안전합니다)
http://codeigniter-kr.org/user_guide/database/active_record.html

위 함수를 액티브레코드를 사용한 것으로 바꿔보면

$res = $this->db->get_where('theater_m', array('theater_type'=>'A'));
$result = $res->result();
return $result;
할랭보 / 2010/03/05 17:23:21 / 추천 0
답변감사합니다! 죄송한데...
 get_tbl_list()는 mysql_query()까지만 한 상태라는게 무슨뜻이죠?;;
$result = $res->result(); 추가하고

$res = $this->db->get_where('theater_m', array('theater_type'=>'A'));
$result = $res->result();
return $result;
스타일로 바꿔도 안되는데 뭐가 잘못된건지.. 아 답답.....ㅠ
변종원(웅파) / 2010/03/05 17:50:41 / 추천 0
쩝.... 좀 희안한 구조로 사용을 하셔서 저도 헷갈렸습니다.
모델에서 데이터를 생성해서 넘기지 않고 쿼리만 넘기는 이유가 있는지 궁금하네요.

$res=$query->result_array();
$this->load->view("list_v",$res);

위 두줄이 문제입니다.
뷰에 데이터를 넘기려면 저런 형태가 아니라
$data['res'] = $query->result_array();
$this->load->view("list_v",$data);

로 넘기셔야 합니다.


제가 자꾸 매뉴얼 이야기를 꺼낼 수밖에 없는 이유는.....
매뉴얼 한번 제대로 보시면 저한테 득이 되는게 아니라 질문하신 분들한테 득이 되는건데
왜 안 읽거나 대충 넘기시는 지 모르겠습니다.

할랭보님이 질문하신 문제는 아주 기본적인 문제입니다.
ci에서 이렇게 써야한다고 정해져있는 view에 데이터 전달하는 방법에 관한...
http://codeigniter-kr.org/user_guide/general/views.html
뷰에 데이터 동적으로 넘기기 보시기 바랍니다.
미드필드 / 2010/03/06 07:25:49 / 추천 0
이스케이프에대해서 궁금해서 메뉴얼 보니까 수동으로는 이렇게 하라고 나오네요

답변이나 질문보면서 어떻게 해결할까 하고 메뉴얼 찾아보는데 몰랐던것을 하나씩 새로 알게 되니까
기분이 좋네요 ㅎㅎ

쿼리 바인딩Query Bindings

바인딩 쿼리를 좀더 간단하게 해줍니다. 아래 예제를 보세요:

$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";

$this->db->query($sql, array(3, 'live', 'Rick'));

쿼리안에 있는 물음표는 자동으로 두번째 파라미터로 전달되는 배열의 값으로 치환 됩니다.

바인딩으로 사용하면 값들은 자동으로 이스케이프 되기때문에 보안에도 좋습니다. 이경우 수동으로 이스케이프해야하는 부담이 없으며, CI가 알아서 해줍니다.


할랭보 / 2010/03/06 10:18:07 / 추천 0
 웅파님, 미드필드님 답변감사합니다~ 공부하는데 많은 도움이 되었어요.
메뉴얼부터 차근차근 다시 봐야겠네요...ㅎ