| 제목 | 모델쪽에서 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은 찍어보셨습니까?