제목 | 모델쪽에서 sql문에서 변수를 사용하면.. | ||
---|---|---|---|
카테고리 | CI 2, 3 | ||
글쓴이 | 창쓰 | 작성시각 | 2017/08/28 15:15:07 |
|
|||
모델쪽에서 sql문에다 변수를 사용하게 되면 읽어오지 못하는데.. 뭐가 문제일까요??
소스 첨부합니다.
function get_list($table = 'bookingdb', $type = '', $offset = '', $limit = '', $search_word = '') { $sword = ''; if ($search_word != '') { // 검색어 있을 경우 $sword = ' WHERE subject like "%' . $search_word . '%" or contents like "%' . $search_word . '%" '; } $limit_query = ''; if ($limit != '' OR $offset != '') { // 페이징이 있을 경우 처리 $limit_query = ' LIMIT ' . $offset . ', ' . $limit; } $sql = "SELECT * FROM " . $table . $sword . " ORDER BY id DESC " . $limit_query; $query = $this -> db -> query($sql); if ($type == 'count') { $result = $query -> num_rows(); } else { $result = $query -> result(); } return $result; }
이렇게 설정하고 접속하면 이렇게 SELECT*FROM ORDER BY id DESC 로 나옵니다. 원래는 중간에 $table 이랑, $sword를 넣으면 이렇게 오류가 납니다.. $sql = "SELECT * FROM " . $table . $sword . " ORDER BY id DESC " . $limit_query; 이 라인이 문제인데. 여기서 변수를 없애고 테이블명을 때려박으면, $sql = "SELECT * FROM bookingdb ORDER BY id DESC " . $limit_query; 로는 정상작동을 합니다.. 왜 이러는 건지 모르겠습니다. 검색기능을 넣을려다가 저 부분이 문제가 생겨서..
|
|||
다음글 | password_helper 관련 질문입니다..! (4) | ||
이전글 | CI와 jQuery를 접한지 일주일정도된 초보입니다..... (5) | ||
배강민
/
2017/08/28 15:21:55 /
추천
0
|
변종원(웅파)
/
2017/08/28 15:24:11 /
추천
0
테이블 변수가 안 넘어가서 그렇습니다. 모델함수에 bookingdb라고 명시되어 있더라도 아무 것도 명시 하지 않아야 작동됩니다. get_list()라고 써야 작동된다는 이야기입니다. |
창쓰
/
2017/08/28 15:24:29 /
추천
0
@배강민 넵! $table 찍어봤는데.. 넘어가지지가 않더라고요 ㅠㅠ 왜 이런건지..ㅠ
|
창쓰
/
2017/08/28 15:34:33 /
추천
0
@웅파님 다름이 아니라 제가 책을보고 따라하고 있는데.. 제가 이해 한게 맞는지 모르겠습니다. function get_list($table = '', $type = '', $offset = '', $limit = '', $search_word = '') { 이런 형식으로 변경하면 된다는 뜻인가요?? 이렇게 변경하면 변수값이 뭔지 모르기 때문에 안넘어가지지 않나요?? 아니면, 밑에 형식처럼 사용하라는 말씀인가요??ㅠㅠ 제가 이해를 잘못해서 죄송합니다.. function get_list() { $table = 'bookingdb'; $type = ''; $offset = ''; $limit = ''; $search_word = ''; $sword = ''; if ($search_word != '') { // 검색어 있을 경우 $sword = ' WHERE subject like "%' . $search_word . '%" or contents like "%' . $search_word . '%" '; } //이하생략
|
배강민
/
2017/08/28 15:41:31 /
추천
0
안넘어가는게 아니라 잘못된 값을 넘기시는 겁니다. 이전에 질문하셨던거 기억으로는 segment로 table값을 받으시던데, 그걸 잘못 받으셨거나 어쨋든 get_list로 넘기기전에 조작이되어서 비어지던가 뭔가 모델을 사용하기 전단의 문제입니다. |
변종원(웅파)
/
2017/08/28 16:18:01 /
추천
0
책이라면 세그먼트를 잘못 선언해서 주소에서 테이블명을 못가져오는 것입니다. 컨트롤러에서 테이블명을 출력해보세요. 주소에서 ci_board가 몇번째 세그먼트인지 세어보시구요. |
창쓰
/
2017/08/28 21:49:46 /
추천
0
@변종원 @배강민님 답변주셔서 감사합니다. 하지만, 해결이 되지않았습니다. 책에 나온 예제 그대로를 적용시켜서 해봤는데도.. 이렇게 테이블명을 불러오지못합니다 ㅠㅠ /** 모델부분 **/ /** * 목록 불러오기 */ class Board_m extends CI_Model { function __construct() { parent::__construct(); } function get_list($table = 'ci_board', $type = '', $offset = '', $limit = '') { $limit_query = ''; if ($limit != '' OR $offset != '') { // 페이징이 있을 경우 처리 $limit_query = ' LIMIT ' . $offset . ', ' . $limit; } $sql = "SELECT * FROM " . $table . " ORDER BY board_id DESC " . $limit_query; $query = $this -> db -> query($sql); if ($type == 'count') { $result = $query -> num_rows(); } else { $result = $query -> result(); } return $result; } } /** 컨트롤러부분 **/ /** * 목록 불러오기 */ public function lists() { $this -> load -> library('pagination'); // 페이지 네이션 설정 $config['base_url'] = '/bbs/board/lists/ci_board/page'; // 페이징 주소 $config['total_rows'] = $this -> board_m -> get_list($this -> uri -> segment(3), 'count'); // 게시물 전체 개수 $config['per_page'] = 5; // 한 페이지에 표시할 게시물 수 $config['uri_segment'] = 5; // 페이지 번호가 위치한 세그먼트 // 페이지네이션 초기화 $this -> pagination -> initialize($config); // 페이지 링크를 생성하여 view에서 사용하 변수에 할당 $data['pagination'] = $this -> pagination -> create_links(); // 게시물 목록을 불러오기 위한 offset, limit 값 가져오기 $page = $this -> uri -> segment(5, 1); if ($page > 1) { $start = (($page / $config['per_page'])) * $config['per_page']; } else { $start = ($page - 1) * $config['per_page']; } $limit = $config['per_page']; $data['list'] = $this -> board_m -> get_list($this -> uri -> segment(3), '', $start, $limit); $this -> load -> view('list_v', $data); }
|
변종원(웅파)
/
2017/08/28 21:59:17 /
추천
0
주소가 빠졌네요. 책 다시 잘 보세요. board/lists/ciboard 형태가 정상형태입니다. 컨트롤러의 페이징주소 부분에도 나와있네요. |
창쓰
/
2017/08/29 13:12:01 /
추천
0
@변종원 @이강민님 감사합니다. 잘 해결되었습니다. 제가 멍청하게 url에 db테이블명을 넣지않아서.. 끝까지 도움주셔서 감사합니다. |
get_list($table = 'bookingdb', $type = '', $offset = '', $limit = '', $search_word = '')
사용처에서 첫번재 인수에 ''이 넘어갔을듯한데요?
넘어온 $table은 찍어보셨습니까?