본문 바로가기
코드이그나이터4 [php5][mysql]

코드이그나이터4, MYSQL과 손잡다.

1. 오토셋 APM 인스톨러 ( apache + php7.2 + mariadb ) 설치 | https://itadventure.tistory.com/93

2. 코드이그나이터 4 ( codeigniter 4 ) 설치 | https://itadventure.tistory.com/95

3. 비주얼 스튜디오 코드 에디터 설치 & 한글 설정 | https://itadventure.tistory.com/96

4. 폴더열기 / 웹페이지 편집(1) | https://itadventure.tistory.com/97

5. 웹페이지 편집(2) | https://itadventure.tistory.com/101

6. 코드이그나이터4의 URL 규칙 | https://itadventure.tistory.com/105

7. php, 네임스페이스 [ namespace ] ?! | https://itadventure.tistory.com/118

8. 코드이그나이터의 네임스페이스, 그리고 모델 | https://itadventure.tistory.com/122

9. 코드이그나이터 뷰의 파라미터 전달 | https://itadventure.tistory.com/147

10. 코드이그나이터 뷰를 나눠 볼까요? | https://itadventure.tistory.com/174

11. MYSQL 이 뭐여? [ 마이에스큐엘은 서류철이다! ] | https://itadventure.tistory.com/175

12. MYSQL 콘솔에 접속해보자! | https://itadventure.tistory.com/178

13. MySql에 넣었다가 꺼냈다가, 뭘? | https://itadventure.tistory.com/265

14. 검색진열대 MYSQL | https://itadventure.tistory.com/267

15. 편집의 왕자 MySQL | https://itadventure.tistory.com/269

16. 코드이그나이터4, MYSQL과 손잡다.


이번 챕터에서는 지난 시간 mysql 에서 사용했던 쿼리문을 코드이그나이터에서 사용하는 방법을 살펴보겠습니다.

제일 먼저는 코드이그나이터에서 Database 에 연결하는 설정을 먼저 잡아주셔야 합니다.
어떻게 잡냐구요? 소스 수정으로 잡을 수 있지요 :)

아래 소스 파일 CODEIGNITER4\app\Config\Database.php 를 열어주신 다음에,

$default 라고 되어 있는 부분의 일부 내용을 아래와 같이 수정해주시면 됩니다.

hostname 우측의 값을 'localhost'
username 우측의 값을 'root',
password 우측의 값을 'autoset',
database 우측의 값을 'library',
DBDriver 우측의 값을 'MySQLi'

오토셋을 통해 웹 기본 설치한 경우 패스워드는 'autoset'이지만,
만일 오토셋이 아닌 다른 설치방법의 경우 패스워드가 다를 수 있으니
각 설치방법에 따른 기본 패스워드값을 참조해 주세요.

:
    public $default = [
        'DSN'      => '',
        'hostname' => 'localhost',
        'username' => 'root',
        'password' => 'autoset',
        'database' => 'library',
        'DBDriver' => 'MySQLi',
:

그 다음으로 지난 코드이그나이터 강좌를 참조하셔서
CODEIGNITER4\app\Controllers\Mysqltest.php 파일을 새로 만들어 주신 다음에,

소스를 아래와 같이 입력해 주세요.

<?php 
namespace App\Controllers;
use CodeIgniter\Controller;
class Mysqltest extends Controller
{
    public function index()
    {
        $db = \Config\Database::connect("default");
        $query = $db->query('SELECT * FROM book');
        $results = $query->getResultArray();
        echo "<xmp>";
        print_r($results);
        echo "</xmp>";
    }
}

오토셋이 실행되어 있으시다면, 위 소스의 URL은 아래와 같습니다. 
아래 URL로 접속하시면 다음과 같은 페이지를 만나 보실 수 있을 겁니다.

http://localhost/mysqltest

Array
(
    [0] => Array
        (
            [number] => 1
            [title] => 3D 모델링 블렌더 2.8
            [body] => 블렌더의 신비! 그 고대의 비밀을 풀어보자!
            [totalpage] => 452
            [author] => 크레이
        )
)

Wow~, book 테이블에 입력되어 있는 책 정보가 노출되는 것을 확인해 보실 수 있습니다.
그런데 지난번에 책 정보를 삭제했기 때문에 단 한권 밖에 없군요?

그렇다면, 이번에는 책을 몇권 더 입력해 봅시다.

코드이그나이터에서 기능성 페이지를 만들어 입력해도 되지만 그건 차차 진행하기로 하고,
MYSQL 콘솔에 접속하셔서 데이터를 입력해주시면 됩니다.

MYSQL 콘솔에 접속하는 부분은 지난 강좌를 참조해 주시기 바라며,
아래와 같이 2건의 추가 자료를 INSERT 명령을 이용해 삽입해 주세요.

insert into book set 
   title='오토셋으로 구현하는 코드이그나이터 4', 
   body='코드이그나이터4로 홈페이지를 만들어볼까요?', 
   totalpage=500,
   author='크레이';
insert into book set 
   title='자바스크립트로 만나는 3D 가상세계', 
   body='캔버스와 three.js 와의 만남, 3차원 가상세계를 만들어 볼까요?', 
   totalpage=500, 
   author='크레이';

이제 다시 한번 웹페이지를 새로 고침하면, 아래와 같은 결과를 만나보실 수 있을 겁니다.

Array
(
    [0] => Array
        (
            [number] => 1
            [title] => 3D 모델링 블렌더 2.8
            [body] => 블렌더의 신비! 그 고대의 비밀을 풀어보자!
            [totalpage] => 452
            [author] => 크레이
        )


    [1] => Array
        (
            [number] => 4
            [title] => 오토셋으로 구현하는 코드이그나이터 4
            [body] => 코드이그나이터4로 홈페이지를 만들어볼까요?
            [totalpage] => 500
            [author] => 크레이
        )


    [2] => Array
        (
            [number] => 5
            [title] => 자바스크립트로 만나는 3D 가상세계
            [body] => 캔버스와 three.js 와의 만남, 3차원 가상세계를 만들어 볼까요?
            [totalpage] => 500
            [author] => 크레이
        )
)

어떻게 이런 결과가 나올 수 있을까요?
우선 페이지의 기본 틀을 구성하는 아래소스는 지난 시간에 익히셨으니 넘어가도록 하구요.

<?php 
namespace App\Controllers;
use CodeIgniter\Controller;
class Mysqltest extends Controller
{
    public function index()
    {

    }
}

index() 메소드 안의 소스를 한줄씩 살펴보기로 합시다.

$db = \Config\Database::connect("default");

이 명령은 챕터 상반부에 데이터베이스 설정을 잡아둔 것을 직접 연결하면서 $db 라는 변수에 불러오는 동작을 합니다.
\Config\Database 는 네임스페이스라고 부르는데요.
정확히는 Config네임스페이스이고, Database클래스에 해당합니다.

뒷 부분의 ::connect("default") 는 스태틱 메소스 호출(Static Method Call) 이라고 하는데, 
자세한 php 문법은 현 단계에서는 건너뛰도록 하겠습니다.

우선은 사용법만 익히면 되지요 :)

$query = $db->query('SELECT * FROM book');

다음으로 SELECT 명령어를 실행하여 book 테이블에 입력되어 있는 책 정보를 가져오는 과정이 필요한데요.
MYSQL 에서는 아래 명령을 통해서 책 정보를 가져 올 수가 있었지요?

SELECT * FROM BOOK

그걸 바로 코드이그나이터에서 실행해주는 겁니다.
MYSQL 에서 실행하는 모든 명령을 쿼리(query) 라고 부르는데요.
php 에서도 메소드명을 그대로 query 라고 부르고 있습니다.

그러니까 사용방법은 아래와 같습니다.

$결과를담을변수 = $db->query("MYSQL 명령");

다만, 착오 없으실 부분은 대부분의 컴퓨터 언어는 
데이터베이스를 다룰 때 쿼리(query)와 패치(fetch) 를 따로 실행해주게 되어 있습니다.

패치(fetch)는 '가지고 오다', '불러 오다'라는 뜻의 영어단어인데요.

금방 실행하는 이 한줄은 MYSQL 명령어를 실행하기는 하지만,
컴퓨터가 이 결과를 임시로 가지고 있는 상태입니다.
이를 테면 짐을 한번에 옮겨와서 아직 바닥에 내려놓지 않은 상태라는 것이지요.

'짐' 하니까 은혜로운 성경말씀이 한 구절 생각나서 잠깐 '운'(?)을 띄웁니다 :)
예수님께서 하신 말씀인데 우리의 영혼에 참 평안을 주시는 말씀으로 묵상됩니다.

마태복음 11:28-29

수고하고 무거운 짐진 자들아 다 내게로 오라 내가 너희를 쉬게 하리라
나는 마음이 온유하고 겸손하니 나의 멍에를 메고 내게 배우라 그러면 너희 마음이 쉼을 얻으리니

그 다음 줄에 짐을 내려놓는 코드가 실행이 됩니다.

$results = $query->getResultObject();

짐을 내려놓을 때 책을 한권씩 내려 놓는 방법도 있고, 한꺼번에 내려 놓는 방법도 있겠지요?
위 코드는 쿼리결과를 담아놓은 $query 변수로부터 getResultObject() 메소드를 실행하여
짐을 한꺼번에 내려놓으면서 $results 라는 변수에 저장해 놓습니다.

짐을 하나씩 내려놓는 방법도 사실 메모리 관리 측면에서 유리한데요.
이 부분은 나중에 살펴보도록 하겠습니다.

echo "<xmp>";
print_r($results);
echo "</xmp>";

이제 최종적으로 결과를 출력합니다.
$results 변수에는 book 테이블에서 가져온 여러권의 책정보가 들어 있습니다.
그 결과를 예쁘게 표를 꾸며서 출력할 수도 있지만 
그냥 단순히 결과를 테스트하기 위해서는 굳이 그런 수고를 할 필요가 없지요.

print_r(변수); 명령어는 변수에 들어있는 내용을 상세하게 표시해주는 아주 간편한 php 기본함수입니다.
다른 언어에서는 찾아보기 힘든 기능인데 사실 이 명령어 하나 때문에 개발이 매우 쉽고 빨라지는 이점이 있습니다.
자매품(?)에 해당하는 기본 명령어로 var_dump 명령어도 있는데 결과 내용이 좀 복잡하지만 유용해서 크레이는 var_dump 명령어를 더 애용합니다 :)

그렇다면 앞 뒤에 echo "<xmp>"; 와 echo "</xmp>"; 는 무엇일까요?
사실 이 부분은 없어도 됩니다.

하지만 이 부분을 빼면 화면에 이런 형식으로 표시될 겁니다. 어디서부터 시작이고 끝인지 잘 알아보기 어렵지요?
print_r 명령은 분명히 줄을 넘기는 Enter 기호를 화면에 출력해 주지만 웹페이지는 <br/> 태그가 있어야만 다음 줄로 넘어가도록 표시해 주기 때문입니다.

Array ( [0] => Array ( [number] => 1 [title] => 3D 모델링 블렌더 2.8 [bod
y] => 블렌더의 신비! 그 고대의 비밀을 풀어보자! [totalpage] => 452 [author
] => 크레이 ) [1] => Array ( [number] => 4 [title] => 오토셋으로 구현하는 
코드이그나이터 4 [body] => 코드이그나이터4로 홈페이지를 만들어볼까요? 
[totalpage] => 500 [author] => 크레이 ) [2] => Array ( [number] => 5 [title]
 => 자바스크립트로 만나는 3D 가상세계 [body] => 캔버스와 three.js 와의 만남, 
3차원 가상세계를 만들어 볼까요? [totalpage] => 500 [author] => 크레이 ) )

그럴 때 쓰는 HTML 태그가 <xmp> 입니다.
이 태그는 <br/> 태그 없이 Enter 기호를 다음줄로 출력해주는 것이지요.
<xmp> 태그로부터 시작해서 </xmp> 태그로 끝나는 부분까지만 말입니다.
그래서 그 결과값이 아래와 같이 표시되는 것입니다.

Array
(
    [0] => Array
        (
            [number] => 1
            [title] => 3D 모델링 블렌더 2.8
            [body] => 블렌더의 신비! 그 고대의 비밀을 풀어보자!
            [totalpage] => 452
            [author] => 크레이
        )


    [1] => Array
        (
            [number] => 4
            [title] => 오토셋으로 구현하는 코드이그나이터 4
            [body] => 코드이그나이터4로 홈페이지를 만들어볼까요?
            [totalpage] => 500
            [author] => 크레이
        )


    [2] => Array
        (
            [number] => 5
            [title] => 자바스크립트로 만나는 3D 가상세계
            [body] => 캔버스와 three.js 와의 만남, 3차원 가상세계를 만들어 볼까요?
            [totalpage] => 500
            [author] => 크레이
        )
)

이번 챕터에서는 코드이그나이터에서 mysql 에 연결하여 자료를 불러와 한꺼번에 출력하는 예제를 다루어 보았는데요.
학습하시는 분들께 도움이 되셨나 모르겠습니다.
아무쪼로 코로나로부터의 위험으로부터 하나님께서 보호하심의 은혜가 있고 건강하시길 바랍니다.

하나님의 은혜가 함께 하시길 소원합니다.
오늘도 여기까지 읽어주셔서 감사합니다 :)