만들면서 배우는 CodeIgniter Q&A

제목 검색 예제에서 Database 에러 (LIMIT -5, 5 부근) 발생하는 경우
글쓴이 빠르게정확하게 작성시각 2015/07/04 10:28:55
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 26080   RSS
'댓글'을 검색했을 경우 

A Database Error Occurred

Error Number: 1064

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-5, 5' at line 1

가 출력되는 경우, 역시나 일단 해결은 했습니다.

Board.php 에서

    $page = $this->uri->segment(5, 1);

    if( $page > 1 )
    {
      $start = (($page/$config['per_page'])) * $config['per_page'];
    }
    else
    {
      $start =0;
      // $start = ($page-1) * $config['per_page'] 이 원래 코드인데, 여기서 에러. 0으로 바꾸면 되는데..
    }


그니까 LIMIT -5 가 출력되는 이유는
$start 값이 -5가 되는데, $start 는 ($page -1) * 5 (예제에서 config['per_page']는 5로 설정되니까요!) 인거고
즉 $page = 0 이고.... 
$page 는 세그먼트값이 할당이 되는데, 저 위에도 되어있듯이 segment(5)에 값이 없으면 1이 되는거니까
사실 오류가 없어야 하는데, 자꾸 0이 되는건....!
PHP는 0과 NULL 을 동률로 생각하니까 즉, 어디선가 NULL 값이 튀어나온다는건데, 그렇다면
여기에서 
$this->uri->segment(5) 는 NULL인건...... 3.0 버젼이라 그런건가요? 아니면 뭔가 놓친게 있나.....
싶어서 이렇게 적어봤습니다.
 
 다음글 session로드하는 부분 막혀서 질문드립니다. (4)
 이전글 4.2 페이지 넘기기 초심자 좌충우돌.. (2)

댓글

변종원(웅파) / 2015/07/04 13:35:14 / 추천 0
$page = $this->uri->segment(5, 1);  책에도 설명되어 있을건데요. 5번째 세그먼트 값을 가져오는데 없으면 1로 설정하는겁니다.
5번째 세그먼트가 있나 보세요.


http://cikorea.net/cibook/view/644/page/1/  포럼주소를 예로 들면 5번째 세그먼트는 1이 되겠죠.
빠르게정확하게 / 2015/07/04 14:17:11 / 추천 0
아!
$page = $this->uri->segment($uri_segment, 1); 로 바꿔줘야 되네요!
제 실습과정에서는 웅파님 말씀대로 5번째 세그먼트에 '댓글'이 할당되어 있었습니다.
제가 헤롱헤롱거리며 공부하느라 중요한 부분을 읽지 못했던 것 같습니다.
부끄럽네요.ㅠㅠ 죄송합니다. 웅파님 감사합니다!
 
헤클 / 2015/07/26 04:20:07 / 추천 1
빠르게 정확하게 님처럼 저도 헤멧습니다.
지금 이시간에 코딩중인데요..
제가 가지고 있는 2쇄 판 (2015년 1월 5일)자 판의 111P 에는
8번의 코딩과 10번의 코딩사이에.. 

 
//게시판 목록을 불러오기 위한 offset, limit 값 가져오기
$page = $this->uri->segment($uri_segment, 1);

이 부분이 두껍게 표시 되지않아.. 거의 1시간을 삽질 했습니다.
왜 결과값에서 쿼리에러가 나올까 하고..
물론 빨리 해결하려고 두꺼운부분만 코딩한것은 저의 잘못이지만...
책에 의존하는 독자로서는... 

함정에 빠질수 밖에 없다고 봅니다.
이댓글이 없었다면... 얼마나 삽질을 했을지..