CI 묻고 답하기

제목 한빛미디어 codeigniter 프레임워크 책 예제 질문
글쓴이 elnino 작성시각 2015/12/27 14:39:18
댓글 : 3 추천 : 1 스크랩 : 0 조회수 : 18147   RSS

현재 클라우드나인이라는 온라인에서 접속해서 쓰는 에디터로 예제를 하고 있습니다.

mysql버전은 5.5이고 코드이그나이터버전은 3.03 입니다.

 

챕터4 게시판 예제는 이틀동안 해결을 못해서 올려봅니다.

전공자가 아니고 독학하는 초보자라 많이 부족해서 답변할때 자세히 설명부탁드립니다.

주소를 확인하라는등 단편적으로 애기하시면 못알아듣습니다. ㅠ ㅠ 

 

첫번째 질문

 

p87페이지 예제 코드

application/models/board_m.php

-----------------------------------------------------

class Board_m extends CI_Model

{       

function __construct()   

{        parent::__construct();   

}    

 

function get_list($table='ci_board')

{   

$sql = "SELECT * FROM ".$table." ORDER BY board_id DESC";   

$query = $this->db->query($sql);   

$result = $query->result();   

// $result = $query->result_array();       

return $result;}

}

-----------------------------------------------------

오류메세지

 

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 'ORDER BY board_id DESC' at line 1

SELECT * FROM ORDER BY board_id DESC

Filename: models/Board_m.php

Line Number: 13

 

 

첫번째로

위에서 sql문을 인식 못해서 오류란에 버전이나 syntax가 정확한지 확인하라고  해서 이것저것 해봤는데 안되서

결국엔".$table.">ci_board로 바꾸니 일단 돌아가긴 하는데 ".$table." 로 하면 안되는 이유를 모르겠습니다. 설명해주시면 감사하겠습니다.

 

2번째로

p89페이지

 

application/views/list_v.php

 

--------책예제 코드-----------------------------------------------------------------------------------------------------

<td><time datetime="<?php echo mdate("%Y-%M-%j", $lt->reg_date);?>"><?php echo mdate("%M. %j, %Y", $lt->reg_date);?></time></td>

---------------------------------------------------------------------------------------------------------------------------

 

--------포럼사이트 에서 알려준내용을보고 수정한 코드---------------------------------------------------------------

 <td><time datetime="<?php echo mdate("%Y-%M-%j", human_to_unix($lt->reg_date));?>"><?php echo mdate("%Y-%M-%j", human_to_unix($lt->reg_date));?></time></td>

---------------------------------------------------------------------------------------------------------------------------

보면 책예제는 mdate 괄호안에 부분이 조금다른데 이게 오타인지 모르겠지만

("%Y-%M-%j", $lt->reg_date)    ("%M. %j, %Y", $lt->reg_date)

 

제가 수정한 내용은 mdate 2개의 괄호안에 내용을 똑같이 해버렸는데 

("%Y-%M-%j", human_to_unix($lt->reg_date))

 

이 교재를 해보셨거나 지은이님 보신다면 자세히 답변좀해주세요

 

 

 

 다음글 AJAX로 컨트롤러 호출시 질문 드립니다. (2)
 이전글 비정상적인 접근을 막기위한 방법. (4)

댓글

변종원(웅파) / 2015/12/27 21:10:33 / 추천 0

1. 에러 메세지의 sql 을 보시면 어디서 가져오는지가 없습니다.

SELECT * FROM ORDER BY board_id DESC

-> SELECT * FROM 테이블명 ORDER BY board_id DESC

 

책과 입력하신 주소를 다시 비교해보세요. 주소에 있는 테이블명을 가져와서 $table 변수로 사용하는데

테이블명이 빠져서 그렇습니다.

 

2. 1쇄의 오탈자인데 헬퍼를 사용하기전에 미리 로딩을 해야합니다. 

config/autoload.php의 헬퍼부분에 date 헬퍼를 넣어주던가 아니면 해당 컨트롤러안에서

$this->load->helper('date'); 해주시면 됩니다. include 개념이라 다른 곳에 있는 파일을 쓰려면

미리 선언을 해줘야 프로그램에서 인식을 하고 사용가능하게 됩니다.

 

좀있음 3쇄가 나오는데 아직 1쇄 책이 있는 것 같네요. (2쇄에서는 오탈자 수정이 되었습니다)

리퍼스 / 2015/12/31 15:37:39 / 추천 1

저도 비슷한 부분에서 오류가 발생해 연구해봤는데... 정확하진 않으나 버전상에 문제인것으로 생각됩니다. 위 웅파님이 기록하신 SQL문을 보시면 테이블명이 누락된것을 볼수 있는데요... 3번째 세그먼트의 값이 없으면서도 'board_id'를 받아 오지 못합니다. 이것을 역추적해본결과 3번째 세그먼트가 없는경우 controller단의 get_list()에서 넘겨준 segment(3)의 값은 models단에서 null값이 아닌 공백('')으로 받는다는데 문제가 있습니다.

null값으로 받아야 자동으로 board_id가 셋팅될텐데 말이죠... 공백으로받으니 당연히 쿼리에서는 테이블명란이 공백으로 나오겠죠..

그래서 전 get_list의 세그먼트 전달부분에서 다음과 같이 인자를 넘겼습니다.

segment(3, 'ci_board')

3번째 세그먼트가 없는 경우 ci_board 값을 넘기는건데요.. 저는 이렇게 해서 정상 적인 결과를 볼수 있었습니다.

더 깊게 연구를 안해봐서 코드이그나이터 버전에 문제인지 설정에 문제인지는 확인하지 못했습니다.

참고하세요  ^^

슬이 / 2019/09/20 16:55:39 / 추천 0

리퍼스님이 알려주신데로 했더니 바로 됩니다. 저도 글쓴이분처럼 테이블명을 바로 붙여서만 할뻔했네요 

감사합니다. ^^