생활코딩

Coding Everybody

Model

토픽 생활코딩 > 서버 > PHP > CodeIgniter

Model

View가 표현을 담당한다면 Model은 데이터를 담당한다. 여기서 데이터란 주로 데이터베이스를 의미한다. 즉 데이터를 다루는 로직을 모델에 모아둬서 데이터와 뷰를 격리 시키는 것이다. 이를 통해서 코드 관리의 편의성을 높일 수 있고, 향후 데이터베이스를 다른 타입으로 교체가 용이하다.

데이터베이스 설정

데이터베이스를 설정하기 위해서는 Application/config/database.php 파일을 수정한다. 이 중에서 주요한 몇가지 설정에 대해서만 언급하면 아래와 같다. (database.php 예제 참고 ,데이터베이스 설정 참고)

  • hostname : 데이터베이스 서버의 주소 (localhost는 PHP와 같은 머신을 의미)
  • username : 데이터베이스 사용자의 이름
  • password : 데이터베이스 비밀번호
  • database : 데이터베이스 명
  • dbdriver : 데이터베이스의 종류로 지원되는 드라이브의 목록은 system/database/drivers 디렉토리명을 참고한다.

데이터베이스 설정 파일에는 서버에 접속 할 수 있는 기밀정보가 포함되어 있기 때문에 버전관리에 포함시키면 안된다. 버전관리를 할 때는 버전관리에서 제외하도록 하자.

데이터베이스 라이브러리 로드

데이터베이스를 사용하기 위해서는 우선 데이터베이스 라이브러리를 로드해야 한다. 이 라이브러리는 CI 에서 데이터베이스를 제어 하는 방법을 제공한다. 이것을 로드하는 방법은 두가지다. (topic.php 예제 참고, 데이터베이스 Quick Start 참고)

  • application/config/autoload.php 파일의 $autoload['libraries'] 배열에 'database'를 추가한다. 
  • controller 내에서 $this->load->database()를 호출한다.

설정과 라이브러리 로드가 끝났다면 이제 모델 클래스 파일을 생성해야 한다. 

모델 파일의 사용

Model 파일은 application/models 디렉토리 아래에 '모델명_model.php' 의 형식으로 파일을 만든다. 파일은 CI_Model 클래스를 상속 받아야 하고 클래스 명은 '대문자로 시작하는 모델명_model'이어야 한다. (topic_model.php 예제 참고 ,Anatomy Model 참고)

모델 내에서 쿼리를 사용하기 위해서는 $this->db를 이용한다. 예를들어 topic 테이블의 내용을 조회한다면 아래와 같이하면 된다.

$this->db->query("SELECT * FROM topic")

쿼리의 결과를 가져오려면 아래와 같이하면 된다.

$this->db->query("SELECT * FROM topic")->result();

쿼리 결과 생성

result()는 쿼리의 결과를 가져오는 방법을 정한다. 만약 연관배열의 형태로 데이터를 가져오고 싶다면 result_array()를 사용하고 결과가 한행이라면 row()를 사용한다. (쿼리 결과 생성 방법 참조)

Active Record

Active Record는 좀 더 프로그래밍적으로 데이터베이스를 제어하는 방법이다. 예를들어 topic 테이블에서 id 값이 3인 행을 조회하고 싶다면 아래와 같이 한다.

$this->db->get_where('topic', array('id'=>$topic_id))->row();

Active Record를 이용하면 표준 SQL을 이용할 수 있어서 에플리케이션을 좀 더 이식성 좋은 형태로 만들 수 있고, 프로그래밍적으로 쿼리를 생성 할 수 있기 때문에 SQL 문자열을 직접 다루는 수고를 덜 수 있다. 

모델 사용

model은 데이터를 가져오는 로직을 메소드로 정의하고, 이 메소드는 controller를 통해서 사용된다. 아래는 모델을 사용하는 방법이다. 

모델 로드

모델을 사용하기 위해서는 모델을 로드해야 하는데 아래의 형식을 사용한다.

형식 : $this->load->model('소문자로된 모델 클래스 명'); 

예제 : $this->load->model('topic_model');

모델 호출

이제부터는 아래의 형식으로 로드한 모델의 API를 호출 할 수 있다. 

형식 : 모델 클래스 명'->'메소드 명'

예제 : $topics = $this->topic_model->gets();

예제

github diff

본 예제는 데이터베이스와 데이터가 필요하다. 필자는 MySQL을 DB로 사용하고, 데이터는 생활코딩 웹서비스 만들기 실습편의 내용에서 사용한 것을 사용할 것이다. 우선 opentutorials라는 데이터베이스를 만들고, topic이라는 테이블을 생성한 후에 데이터를 삽입하자.

CREATE DATABASE opentutorials CHARACTER SET utf8 COLLATE utf8_general_ci;
use opentutorials;
CREATE TABLE topic (
    id  int(11) NOT NULL AUTO_INCREMENT,
    title  varchar(255) NOT NULL ,
    description  text NULL ,
    created  datetime NOT NULL ,
    PRIMARY KEY (id)
);
INSERT INTO `topic` (title,description,created) VALUES ('JavaScript란', '<h2>\r\n    자바스크립트는</h2>\r\n<ul>\r\n	<li>\r\n		브라우저에서 실행되는 언어</li>\r\n	<li>\r\n		가장 많이 사용되는 언어</li>\r\n	<li>\r\n		주로 html을 프로그래밍적으로 조작하기 위해서 사용됨</li>\r\n</ul>\r\n<h2>\r\n	예제</h2>\r\n<ul>\r\n	<li>\r\n		자바스크립트는 3가지 방식으로 사용됨</li>\r\n	<li>\r\n		외부의 파일을 로드</li>\r\n	<li>\r\n		&lt;script&gt;태그 사이에 기술</li>\r\n	<li>\r\n		태그에 직접 기술</li>\r\n</ul>\r\n<h2>\r\n	참고링크</h2>\r\n<ul>\r\n	<li>\r\n		<a href=\"http://www.maroon.pe.kr/webmaster/java/java_study.html\" target=\"_blank\">스크립트 세상</a></li>\r\n	<li>	\r\n</ul>\r\n', now());
INSERT INTO `topic` (title,description,created) VALUES ('변수와 상수', '<p>\r\n	변수란</p>\r\n<ul>\r\n	<li>\r\n		변하는 값</li>\r\n	<li>\r\n		x = 10 일 때 왼쪽항인 x는 오른쪽 항인 10에 따라 다른 값이 지정된다.</li>\r\n</ul>\r\n<p>\r\n	상수란</p>\r\n<ul>\r\n	<li>\r\n		변하지 않는 값</li>\r\n	<li>\r\n		x = 10 일 때 오른쪽항인 10이 상수가 된다.</li>\r\n</ul>\r\n<pre class=\"brush: xml\">\r\n&lt;script type=&quot;text/javascript&quot;&gt;\r\n&nbsp;&nbsp;&nbsp; // x의 값이 오른쪽 항에 따라서 변한다.\r\n&nbsp;&nbsp;&nbsp; // x가 변수라는 명시적인 의미\r\n&nbsp;&nbsp;&nbsp; var x = 10;\r\n&nbsp;&nbsp;&nbsp; alert(x);\r\n&nbsp;&nbsp;&nbsp; var x = 20;\r\n&nbsp;&nbsp;&nbsp; alert(x);\r\n&lt;/script&gt;</pre>\r\n<p>\r\n	&nbsp;</p>\r\n', now());
INSERT INTO `topic` (title,description,created) VALUES ('연산자', '<p>\r\n	연산에 사용되는 기호들. (y = 5 일 때)</p>\r\n<table class=\"table\">\r\n	<tbody>\r\n		<tr>\r\n			<th align=\"left\" width=\"15%\">\r\n				Operator</th>\r\n			<th align=\"left\" width=\"40%\">\r\n				Description</th>\r\n			<th align=\"left\" width=\"25%\">\r\n				Example</th>\r\n			<th align=\"left\" width=\"20%\">\r\n				Result</th>\r\n		</tr>\r\n		<tr>\r\n			<td valign=\"top\">\r\n				+</td>\r\n			<td valign=\"top\">\r\n				더하기</td>\r\n			<td valign=\"top\">\r\n				x=y+2</td>\r\n			<td valign=\"top\">\r\n				x=7</td>\r\n		</tr>\r\n		<tr>\r\n			<td valign=\"top\">\r\n				-</td>\r\n			<td valign=\"top\">\r\n				빼기</td>\r\n			<td valign=\"top\">\r\n				x=y-2</td>\r\n			<td valign=\"top\">\r\n				x=3</td>\r\n		</tr>\r\n	</tbody>\r\n</table>\r\n', now());
INSERT INTO `topic` (title,description,created) VALUES ('JSON', '<h2>JSON이란?</h2>\r\n\r\n<p>서로 다른 언어들간에 데이터를 주고 받는 여러 방법이 있다. 대표적인 것이 XML인데, XML은 문법이 복잡하고, 엄격한 표현규칙으로 인해서 json 대비 데이터의 용량이 커진다는 단점이 있다.</p>\r\n\r\n<p>JSON은 경량의 데이터 교환 형식으로 JavaScript에서 숫자와 배열등을 만드는 형식을 차용해서 이것을 다른 언어에서도 사용할 수 있도록 한 텍스트 형식이다.&nbsp;</p>\r\n\r\n<p>아래 예제는 위의 예제에서 전송한 데이터를 받아서 몇가지 부가정보를 추가해서 json으로 인코드한 후에 다시 반환하는 PHP 코드다.&nbsp;</p>\r\n\r\n<p>json.php - (<a href=\"https://github.com/egoing/codingeverybody_javascript/blob/master/JSON/json.php\" target=\"_blank\">github</a>)</p>\r\n\r\n<pre class=\"brush: php\">\r\n&lt;?php\r\n$userinfo = json_decode($_GET[&#39;data&#39;]);\r\n$userinfo-&gt;address = &#39;seoul&#39;;\r\n$userinfo-&gt;phonenumber = &#39;01023456789&#39;;\r\necho json_encode($userinfo);\r\n?&gt;</pre>\r\n\r\n<h2>json의 형식</h2>\r\n\r\n<h3>object</h3>\r\n\r\n<p>객체는 아래와 같은 문법을 가지고 있다.</p>\r\n\r\n<p>예제</p>\r\n\r\n<p>{&quot;userid&quot;:&quot;egoing&quot;,&quot;pwd&quot;:&quot;12345567&quot;}</p>\r\n\r\n<p><img height=\"113\" src=\"http://www.json.org/object.gif\" width=\"598\" /></p>\r\n\r\n<h3>array</h3>\r\n\r\n<p>배열은 아래와 같은 문법을 가지고 있다.&nbsp;</p>\r\n\r\n<p>예제</p>\r\n\r\n<p>[1,2,3,4]</p>\r\n\r\n<p><img height=\"113\" src=\"http://www.json.org/array.gif\" style=\"line-height: 1.8em;\" width=\"598\" /></p>\r\n\r\n<h3>Value</h3>\r\n\r\n<p>위에서 사용된 Value는 값을 의미하는데&nbsp;큰 따옴표로 묶인 문자나 숫자, 불린 값이 사용된다.</p>\r\n\r\n<p>예제</p>\r\n\r\n<ul>\r\n	<li>문자 : &quot;헬로우 월드&quot;</li>\r\n	<li>숫자 : 1</li>\r\n	<li>불린 : true</li>\r\n</ul>\r\n\r\n<p><img height=\"278\" src=\"http://www.json.org/value.gif\" width=\"598\" /></p>\r\n', now());

application/config/database.php

일부 웹호스팅 환경에서는 pconnect true를 지원하지 않는 경우가 있다. pconnect에 대해서는 아래 링크를 참조하자. pconnect

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
$active_group = 'default';
$active_record = TRUE;
$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'egoing';
$db['default']['password'] = '111111';
$db['default']['database'] = 'opentutorials';
$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;

application/controllers/topic.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Topic extends CI_Controller {
    function __construct()
    {       
        parent::__construct();
        $this->load->database();
        $this->load->model('topic_model');
    }
    function index(){        
        $this->load->view('head');
        $topics = $this->topic_model->gets();
        $this->load->view('topic_list', array('topics'=>$topics));
        $this->load->view('main');
        $this->load->view('footer');
    }
    function get($id){        
        $this->load->view('head');
        $topics = $this->topic_model->gets();
        $this->load->view('topic_list', array('topics'=>$topics));
        $topic = $this->topic_model->get($id);
        $this->load->view('get', array('topic'=>$topic));
        $this->load->view('footer');
    }
}
?>

application/models/topic_model.php

<?php
class Topic_model extends CI_Model {

    function __construct()
    {    	
        parent::__construct();
    }

    function gets(){
    	return $this->db->query("SELECT * FROM topic")->result();
    }

    function get($topic_id){
    	return $this->db->get_where('topic', array('id'=>$topic_id))->row();
    }
}

application/views/get.php

<article>
	<h1><?=$topic->title?></h1>
	<div>
		<?=$topic->description?>
	</div>
</article>

위의 예제에서 <?=$topic->title?> 은 <?=htmlspecialchars($topic->title)?>으로 처리해야 한다. htmlspecialchars 는 HTML 코드를 HTML 코드를 인코딩해서 html 코드가 해석되지 않도록 한다. 예를들어 아래의 내용을 제목으로 입력해보자. (입력 한 후에 디비에서 직접 데이터를 직접 삭제할 수 있는 경우만 하자. 안그러면 페이지로 접근 자체가 불가능해질 것이다. ) <script>alert('haha');location.href="http://naver.com"</script> 해당 페이지로 방문한 사용자를 엉뚱한 페이지로 보내버린다. 이것을 방지하기 위한 기능이 htmlspecialchars다. 이것은 매우 중요한 부분이지만, 다소 복잡한 논의가 함의되어 있기 때문에 보안시간에 알아볼 생각이었는데 보안 수업이 예상보다 뒤에 배치되면서 임시로 언급만 해두겠다. 보안에 대한 내용은 다음 링크를 참조한다. http://opentutorials.org/module/327/3837

application/views/main.php

토픽메인

application/views/topic_list.php

<ul>
<?php
foreach($topics as $entry){
?>
	<li><a href="/index.php/topic/get/<?=$entry->id?>"><?=$entry->title?></a></li>
<?php
}
?>
</ul>

 Tag

태그이름 : Model2

태그 주소 : https://github.com/egoing/codeigniter_codeingeverbody/tree/Model2

댓글

댓글 본문
  1. 의기천추
    Topic_model.php 대문자로 만들어야 로드됨
  2. 공부하기
    ci4로 변경해서 하다보니 라우터 관련도 같이 하게되어서
    메모해두기
    app>config>Routes.php에서
    $routes->get('main', 'Main::index'); 작성으로 없애버림
    topic_list.php의 링크 변경
    <a href="/프로젝트폴더명/public/main/get/<?php echo $entry->id;?>"><?php echo $entry->title;?></a>
  3. 존레논아부지
    2022-10-24 완
  4. dueto park
    2022.06.28. model 실습 수강 완.

    # 에러 수정

    ## 에러 메세지
    No database selected
    SELECT * FROM topic

    ## 해결
    - application/models/Topic_model.php 파일의 gets 메소드
    - 수정 전: 'SELECT * FROM topic'
    - 수정 후: 'SELECT * FROM 데이터명.topic'
    ================================================
    ## 에러 메세지
    SELECT * FROM `topic` WHERE `id` = '1'
    Filename: models/Topic_model.php
    Line Number: 12

    ## 해결
    - application/models/Topic_model.php 파일의 get 메소드
    - 수정 전: get_where('topic', array('id'$topic_id))
    - 수정 후: get_where('데이터명.topic', array('id'$topic_id))
  5. dueto park
    2022.06.25. model 이론 수강 완.
  6. jeisyoon
    ..
    대화보기
    • jeisyoon
      여행을 다녀 오느라 답변이 늦어 죄송합니다.
      본 강의는 10여년 전에 했던 것으로 개발 환경이 너무 많이 바뀌어 하면 할 수록 문제가 발생하여
      실습을 하면서 따라가기가 너무 힘이 듭니다.

      그래서 저는 실습은 안하고 이론만 습득하고 완강 후 최신 버전으로 처음 부터 새로
      시작하여 마스터 했습니다.

      혹시 도움이 될지 몰라 제가 그간 스터디 한것을 정리 하여
      본 강의 중간 쯤 화일 업로드 & ckEditor 댓글에 올려 놓았으니 참조하세요.
      댓글을 복사하여 이곳에 붙여 넣기를 하여였는데 관련 사이트 연결이 안되드군요.
    • Corini
      안녕하세요.. 저도 DB 접속 에러에 관해서 머리를 앓고 있는데.. 혹시 어떻게 수정하셨는지 알 수 있을까요..??
      대화보기
      • jeisyoon
        2021.08.15 Model - OK

        8년 전에 만들어진 강의로 개발 환경이 많이 변해 Error 가 다수 발생하여 따라 가기가 힘들었다.

        1. Codeigniter 2 -> Codeigniter 4 로 변경
        2. Bitnami 기본 DB는 MySQL -> Maria DB로 변경
        3. MySQL 확정모드 중단으로 mysql -> mysqli 변경
        4. PHP 는 5 -> 8로 Relese 되면서 성능 개선과 기능 추가로 Error 속출

        등으로 수강을 포기하려다

        /application/config/database.php 수정
        /system/database/DB_driver.php/ 수정 (125 주석처리) 등 등 ...

        우여곡절 끝에 Model 수강 완료 ~~ 휴 진땀난다....
      • 김진회
        이거 mysql 8.x 버전으로 깔면 기본 문자셋(charset)이 utf8mb4로 변경되는 등의 이슈 때문에 제대로 안되는 것 같아요.
        결국 다 삭제하고 mysql 5.7버전 깔아서 다시 했더니 오류 안 나고 되네요. ㅠㅠ
      • 웹짱
        2020.10.27
      • 미댈
        두번째영상에서 테스트하는중에 에러뜨면
        database.php의 dbdriver 설정을 mysqli로 해보세요~
      • 키썬
        감사합니다.
      • 김현수
        코드이그나이트2에서는 오히려 모델 php파일명을 대문자로하고 대문자로 셋팅할경우 못찾네요...
        (즉 동영상대로 셋팅해야 됨, 컨트롤러는 대문자로하나 소문자로하나 둘다찾았는데...)
      • 정민규
        감사합니다.
        영상에서는 파일명은 소문자로 시작하고, 클래스명은 대문자로 시작하길래 따라하다가 잘 안되어서 헷갈렸습니다. ㅠㅠ
        대화보기
        • lunaman
          휴. 손에 안익어서 그런지
          오타찾는데 더 시간이 걸리네요. ㅎㅎ.
        • five2nine
          $db['default']['dbdriver'] = 'mysql'; -->
          $db['default']['dbdriver'] = 'mysqli';
        • 두번째 동영상에서 db 로드를 해와야 하는데 못해오는거 같습니다.

          cmd창으로 입력 안 하고 phpmyadmin으로 입력헀는데요 연결이 안 되는거 같은데 이유가 뭔가요?

          Invalid DB driver 에러 메세지 뜨네요 ㅠㅠ
        • 김해중
          전 dbdriver는 pdo로 하고 싶어서 pdo로 했는데
          Invalid or non-existent PDO subdriver

          라는 에러가 떠서 어쩔수없이 mysqli로 했는데
          이거 도와주실수 있나요..?
        • Kun-Woo Lee
          좋은 강좌 감사합니다
        • Yosi Gom
          똑같이 했는데 왜 404가 뜨지 ㅠㅠ
        • 열정을가진
          2번영상
          SELECT query 결과값이 이렇게 나오는데요?

          "0123 토픽 메인 페이지 "

          id값만 나오는데 다른 cloum이 안나와 요ㅜㅜ

          OTL....
        • 에슬
          어디서 막히셨나용
          저도 막혀서 두번봤어요!
          두번째에는 되더라구요 ㅎㅎ
          대화보기
          • 아싸인싸으싸
            버전이 달라서 그런지 여기서 막히네요 ㅡㅡ
          • 김세창
            살짝 복잡하긴 했지만 응용만 잘하면 아주 좋겟습니다~!! 고맙습니다~ ㅎㅎ
          • ecoming
            데이터베이스 설정에서요
            mysqli 로 하면 되는데 그냥 mysql 로 하니깐 안되네요 ??
          • Kim Jeehwan
            htmlspecialchars($topic->description)를 썼더니 HTML 코드 그대로 나오네요?

            브라우저가 HTML을 파싱하게 하는 방법 없나요?
          • JustStudy
            고맙습니다
          • 허민호
            어렵다..
          • 주재호
            안녕하세요. 강의 본질과 다른 질문이 될 수 있는데 궁금해서요.
            이미 데이터베이스에서 모든 topics 를 가져왔는데 id 로 다시 select 해 title 과 description 을 가져올 필요가 있는 건가요? 이미 가져온 객체(테이블정보)를 메소드 인자로 넘겨 재활용하면 프로그램 성능 상에서 더 비효율적인건가요?
          • 고고1
            음,, 듣다보니, 찬찬히 CI 메뉴얼 보고 강의를 보는게 좋을 것 같아서,, ㅎㅎ
            제가 따라가는 속도가 늦네여 ㅜㅜ
          • ahydas
            myysql의 my.cnf 파일에서 'bind-address'항목이 127.0.0.1로 기본설정이 되어 있는데요,
            이 값을 localhost로 바꿔주어야 합니다.
            아니면 앞머리에 #을 붙여서 설정이 적용되지 않도록 해야 합니다.

            방법은
            sudo nano /etc/mysql/my.cnf
            를 입력후 편집기 안에서 수정하시면 됩니다.
            대화보기
            • 코이코이
              아... View까지는 매우 쉽게 잘 됐는데
              여기 Model 2강부터 매우 꼬이는군요
              view강의때 get을 main이라고 바꾸라고 하셨는데 여기서는 그게 적용안된거에서 꼬입니다.
              근데 이거는 별로 크지 않은 문제고... 큰 문제는 이거네요

              저 밑에는 DB의 본문 내용(그냥 문자열)인데요.
              빨간박스의 내용은 솔직히 봐도 잘 모르겠고...
              수업들으시는분들은 MVC의 핵심내용만 아시자고 하시면
              phpmyadmin 들어가신후, 삽입란에가서 DB의 본문내용을
              <p>자바스크립트 본문입니다.</p>
              <p>자바스크립트 본문입니다.</p>
              <p>자바스크립트 본문입니다.</p>
              이렇게 바꾸고 하시는게 낫겠네요



              문제의 DB 값입니다. html형식만 있어야하는곳에 \r\n이 왜 들어갔는지 모르겠네요...
              \r\n는 php에서만 먹히는 코드일텐데
              VALUES ('JavaScript란', '<h2>\r\n 자바스크립트는</h2>\r\n<ul>\r\n <li>\r\n 브라우저에서 실행되는 언어</li>\r\n <li>\r\n 가장 많이 사용되는 언어</li>\r\n <li>\r\n 주로 html을 프로그래밍적으로 조작하기 위해서 사용됨</li>\r\n</ul>\r\n<h2>\r\n 예제</h2>\r\n<ul>\r\n <li>\r\n 자바스크립트는 3가지 방식으로 사용됨</li>\r\n <li>\r\n 외부의 파일을 로드</li>\r\n <li>\r\n &lt;script&gt;태그 사이에 기술</li>\r\n <li>\r\n 태그에 직접 기술</li>\r\n</ul>\r\n<h2>\r\n 참고링크</h2>\r\n<ul>\r\n <li>\r\n <a href=\"http://www.maroon.pe.kr/webmaster/java/java_study.html\" target=\"_blank\">스크립트 세상</a></li>\r\n <li> \r\n</ul>\r\n', now());
            • 자바몬
              저두 이거때메 왜이러징 하고 한시간을 날렸어여 ㅜㅜ
              이게 보니까 인코딩을 client 쪽과 server 쪽을 utf8 로 통일하면
              한글로 입력한것은 아예 쌩? 까더라구여..
              그래서 server 쪽은 utf8로 하구여 client 쪽은 euckr 로 바꾸니까
              한글 입력과 출력이 잘되네여.
              그 Mysql에서 설정하는 파일 잇자나여 my.ini 에서
              [client]
              default-character-set=euckr
              [mysqld]
              default-character-set=utf8
              만 있으면 바꾸고 없으면 추가해주시면 정상적으루 잘되네여.
              물론 mysql 껏다키고 데이터베이스 삭제했다가 다시 입력해주세여~
              대화보기
              • 마지막에
                function index(){
                $this->load->view('head');
                $topics = $this->topic_model->gets(); <<이것또한 아래 코드와
                ...
                }
                function get($id){
                $this->load->view('head');
                $topics = $this->topic_model->gets(); <<이것또한 위의 코드와
                ...

                함께 function __construct(){ 쪽으로 빼고 싶은데 방법 아시는 분?
              • 정동원
                class명의 첫 문자를 대문자로 해야 하는건 변경 된건가요?
                별 생각 없이 소문자로 쓰고 따라하고 있었는데 문제 없이 동작 되고 있습니다.
                뭔가 이상해서 덧글을 남깁니다~ 좋은 강의 항상 감사 드립니다.
              • 이럴수가!
                작동은 되나 앞으로 mysql 지원이 중단되니 mysqli로 바꿔달라는 에러가 뜨네요~

                그래서 application/config/database.php

                옵션에서 bdriver에서 mysql을 mysqli로 바꿨더니 오류가 발생하지 않네요...
              • CodeIgniter 3.0 부터는 model php 파일 앞글자를 대문자로 써야되는거 같아요.
              • 이선호
                <?
                $connect = mysql_connect("localhost","username","passwd")
                or die (mysql_error());
                mysql_select_db("dbname");
                ?>

                이렇게 db 연결구문을 사용하고 나서 db 접속을 해보세요.

                'localhost' 는 그대로 써주면 되고,
                'username' 은 mySQL db의 생성자 id,
                'passwd'는 mySQL 접근을 위한 user의 비밀번호 입니다.
                대화보기
                • 옵티마이저
                  일단 어떻게든 실습은 모두 마무리를 했는데요 mysql 모니터를 통해서 입력한 데이터 중. 한글로 작성된 내용은 아예 출력이 되질 않네요. select *from topic/G를 해도 영타만 보이고, INSERT문을 통한 한글입력부분은 아예 없습니다.
                  UTF-8으로 바꾼다고 여기저기 손을 대보았지만 여전히 출력이 안되는데요. 무슨 문제가 있는걸까요?
                • 아이반
                  강의 열심히 잘 보고 있습니다.
                  동영상강의를 보다가 궁금한 점이 생겨서 질문 드립니다.
                  강의에서 처럼 테이터베이스에 접속하면 기본적으로 connetion pool를
                  사용하는건지 아니면 connetion pool을 사용하기 위하여 따로 설정하여야 하는지
                  고수님들 좀 알려 주셨으면 합니다.
                  그럼 좋은 하루 되세요.
                • david20jazz
                  mysql에 데이터 베이스 입력하는 단계에서 아래와 같은 오류가 뜹니다. 혹시 아시는 고수님 계신가요? 카페24 호스팅 사용하고 있습니다.

                  No connection. Trying to reconnect...
                  ERROR 2005 (HY000): Unknown MySQL server host 'now());' (3)
                  ERROR:
                  Can't connect to the server
                • 배트맨
                  브라우저 인코딩을 utf-8로 맞춰보세요~
                  대화보기
                  • 질문
                    저도 gets()불러올 때 db정보가 깨져서 나와요..
                    어떻게 해야하나요?????????? 도와주세요!!

                    object(stdClass)#17 (4) { ["id"]=> string(1) "1" ["title"]=> string(13) "JavaScript�€" ["description"]=> string(209) "
                    �먮컮�ㅽ겕由쏀듃��

                    釉뚮씪�곗��먯꽌 �ㅽ뻾�섎뒗 �몄뼱
                    媛€�� 留롮씠 �ъ슜�섎뒗 �몄뼱
                    二쇰줈 html�� �꾨줈洹몃옒諛띿쟻�쇰줈 議곗옉�섍린 �꾪빐�� �ъ슜��
                    " ["created"]=> str

                    생략..
                  • 김용휘
                    위 예제로 따라하다 gets()불러올 때 return $this->db->query('SELECT * FROM topic ')->result();
                    db에 있는 정보가 출력이 될 떄 아래 처럼 깨져서 나와요 어떻게 해야하나요??전부 utf8로 맞춰져 있어요 ㅜㅡ

                    object(stdClass)#17 (4) { ["id"]=> string(1) "1" ["title"]=> string(13) "JavaScript¶?" ["description"]=> string(681) "
                    ??¹?½º??¸³Æ®´?

                    º?¶?¿???¿¡¼­ ½?????´? ¾ð¾?
                    °¡?? ¸¹?? ??¿???´? ¾ð¾?
                    ??·? html?? ??·?±×·¡¹????¸·? ?¶????±? ?§?ؼ­ ??¿???
                    ¿¹??
                    생략......
                  • 김승갑
                    좋은 강의 감사합니다. 많이 배워가네요 :D
                  • egoing
                    var_dump는 브라우저에서 소스보기 한번해보세요. 디비는 한글인 경우 입력이 안되지 않나요?
                    대화보기
                    • 최석준
                      안녕하세요~ 좋은강좌 정말 감사드립니다.

                      공부하는중 문제이 봉착했습니다.

                      첫번재 var_dump로 데이터베이스에 입력된 값을찍어보니 강좌처럼 정리되서 찍히지 않고 전부 붙어져서 출력이되네요 ㅠㅠ
                      왜그런걸까요?

                      두번째 Mysql 콘솔에서 태그를 입력하니 한글과 일부 태그는 insert 되지 않는 현상이 있어서서요

                      확인부탁드릴게요~
                      감사합니다.
                    • 연필깎이
                      아.. 아래 빨간박스를 뒤늦게 봤네요.. ㅎㅎ
                      대화보기
                      • 연필깎이
                        실습 과정에서 크게 중요하진 않은 부분 같은데..
                        2번영상 10:42초경에 var_dump()로 출력한 부분에서..
                        태그들이 그냥 텍스트로 출력되잖아요..
                        저의 경우는 태그가 적용되서 화면에 출력되거든요..
                        3번 영상에서 get에 해당하는 페이지들이 보이듯이..
                        그렇게 태그가 적용된 내용들이 보입니다.
                        var_dump()만으로 태그가 텍스트로만 보이게 하려면 어떻게 해야 하나요?