[우분투 XAMPP-2] CodeIgniter 설치, mySQL 추가 및 연결

jin_sk·2020년 9월 17일
0

XAMPP

목록 보기
2/2

CodeIgniter 란?

웹개발을 위해 PHP로 작성된 MVC (Model, View, Controller) 프레임워크
코드이그나이터 튜토리얼

MVC 란?

  • Model, View, Controller 의 약자로 각각의 역할을 나누어서 코딩을 하는 모델이다
    • Model 시스템의 비지니스 로직 담당 (Data Base와 연동)
    • View 화면의 표시, 입력 등의 처리 (사용자에게 보여지는 화면)
    • Controller 유저의 입력에 근거하여 Model, View 제어 (전체적인 동작을 담당)

CodeIgniter-ver.3 설치 (안정된 버전)


CodeIgniter-ver.4 설치 (Bata 버전)

  • CodeIgniter 4 다운로드
  • git 에서 clone 받는 방법도 있으나 일단 그냥 진행하기로함
  • /opt/lampp/htdocs 폴더에 넣기 (폴더이름 수정함!)
  • 기본적인 내용을 삭제하지 않았기에 http://localhost/codeigniter4/public/ 했으나
    오류 발생
    Whoops! We seem to have hit a snag. Please try again later...
  • env 파일 수정
    • 기존 env.env 파일 이름 수정
    • # CI_ENVIRONMENT = productionCI_ENVIRONMENT = development 수정
  • 수정했는데 또 오류 발생
    CodeIgniter\Cache\Exceptions\CacheException Cache unable to write to /opt/lampp/htdocs/codeigniter4/writable/cache/
    친절하게무슨 파일 몇번째 줄인지도 알려줬다
    CacheException.php 의 55번째 줄

    unableToWrite 에러라 권한 부여
    sudo chmod 777 -R /opt/lampp/htdocs/codeigniter4/writable/
    권한 부여 후 새로고침 하니 드디어 Welcome 이 떴다...

DB연결 및 테스트하기

접속

phpMyAdmin

  • phpMyAdmin 에서 아래와 같이 직접 생성가능한것 같으나 (잘은 모르겠지만...) 서버에 접속해서 해보도록 하자


터미널

  • 상태 확인 sudo /opt/lampp/lampp status

  • mySQL 접속 sudo /opt/lampp/bin/mysql
    접속이 되면 아래와 같이 환영 메시지가 뜬다
    Welcome to the MariaDB monitor. Commands end with ; or \g.
    Your MariaDB connection id is 107
    Server version: 10.4.14-MariaDB Source distribution
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

  • mySQL 용어
    General information about MariaDB can be found at
    http://mariadb.org
    List of all client commands:
    Note that all text commands must be first on line and end with ';'
    ? (\?) Synonym for 'help'.
    clear (\c) Clear the current input statement.
    connect (\r) Reconnect to the server. Optional arguments are db and host.
    delimiter (\d) Set statement delimiter.
    edit (\e) Edit command with $EDITOR.
    ego (\G) Send command to MariaDB server, display result vertically.
    exit (\q) Exit mysql. Same as quit.
    go (\g) Send command to MariaDB server.
    help (\h) Display this help.
    nopager (\n) Disable pager, print to stdout.
    notee (\t) Don't write into outfile.
    pager (\P) Set PAGER [to_pager]. Print the query results via PAGER.
    print (\p) Print current command.
    prompt (\R) Change your mysql prompt.
    quit (\q) Quit mysql.
    rehash (\#) Rebuild completion hash.
    source (\.) Execute an SQL script file. Takes a file name as an argument.
    status (\s) Get status information from the server.
    system (\!) Execute a system shell command.
    tee (\T) Set outfile [to_outfile]. Append everything into given outfile.
    use (\u) Use another database. Takes database name as argument.
    charset (\C) Switch to another charset. Might be needed for processing binlog with multi-byte charsets.
    warnings (\W) Show warnings after every statement.
    nowarning (\w) Don't show warnings after every statement.
    For server side help, type 'help contents'

DB 생성

터미널

database 생성 ➡ CREATE "database 생성하려는 DB 이름";

생성하려 했으나 phpMyAdmin 에서 이미 생성한게 있어서 만들어지지 않았다..
추가로 만드는 방법이 당연히 있을것 같지만 일단은 기존에 만든걸로 진행

MariaDB [(none)]> CREATE database test;
ERROR 1007 (HY000): Can't create database 'test'; database exists

만들어진 database 사용 ➡ use "생성한 database 이름";

MariaDB [(none)]> use myDB;
Database changed

table 생성 ➡
CREATE TABLE "database 이름" (
    num INT(11) unsigned NOT NULL,
    title VARCHAR(100) NOT NULL,
    PRIMARY KEY (num)
);

table 생성
위에 나온 용어 꼭 풀이하기

MariaDB [myDB]> CREATE TABLE myDB (
    -> num INT(11) unsigned NOT NULL,
    -> title VARCHAR(100) NOT NULL,
    -> PRIMARY KEY (num)
    -> );
Query OK, 0 rows affected (0.032 sec)

value 입력 ➡ INSERT INTO "database 이름" (num, title) VALUES(0, '테스트1');

MariaDB [myDB]> INSERT INTO myDB (num, title) VALUES(0, '테스트1');
Query OK, 1 row affected (0.027 sec)

MariaDB [myDB]> INSERT INTO myDB (num, title) VALUES(1, '테스트2');
Query OK, 1 row affected (0.007 sec)

// 중복값을 넣어서 생긴 오류 
MariaDB [myDB]> INSERT INTO myDB (num, title) VALUES(0, '테스트2');
ERROR 1062 (23000): Duplicate entry '0' for key 'PRIMARY'
  • 터미널 과정

  • phpMyAdmin 가서 확인해보면 아래와 같이 뜬다. 신기하다...

php 파일 작성

DB 접속 설정 (database.php 작성)

  • 기본적으로 나와있는 코드를 수정한다
  • 경로 application/config/database.php
  • 코드
$db['myDB'] = array(
	'dsn'	=> '',
	'hostname' => 'localhost',
	'username' => 'root',
	'password' => '',
	'database' => 'myDB',
	'dbdriver' => 'mysqli',
	'dbprefix' => '',
	'pconnect' => FALSE,
	'db_debug' => (ENVIRONMENT !== 'production'),
	'cache_on' => FALSE,
	'cachedir' => '',
	'char_set' => 'utf8',
	'dbcollat' => 'utf8_general_ci',
	'swap_pre' => '',
	'encrypt' => FALSE,
	'compress' => FALSE,
	'stricton' => FALSE,
	'failover' => array(),
	'save_queries' => TRUE
);
  • 기존 코드
// 기본 코드
$db['default'] = array( // CI에서 DB를 불러올 때 사용할 이름, database와 동일하게 지정하는 것이 좋음
	'dsn'	=> '',
	'hostname' => 'localhost',
	'username' => '',	// DB에 접속할 user이름, 필수 설정
	'password' => '',	// DB user의 PW, 있으면 필수 설정
	'database' => '', // DB 선택, 필수 설정
	'dbdriver' => 'mysqli',
	'dbprefix' => '',
	'pconnect' => FALSE,
	'db_debug' => (ENVIRONMENT !== 'production'),
	'cache_on' => FALSE,
	'cachedir' => '',
	'char_set' => 'utf8',
	'dbcollat' => 'utf8_general_ci',
	'swap_pre' => '',
	'encrypt' => FALSE,
	'compress' => FALSE,
	'stricton' => FALSE,
	'failover' => array(),
	'save_queries' => TRUE
);

controller 파일 생성 (Main.php)

  • 주소 확장을 위한 controller 파일 생성
  • 경로 application/controllers
  • 코드
<?php defined('BASEPATH') OR exit('No direct script access allowed');

//컨트롤러의 파일생성은 기본적으로 주소창의 주소 확장
//간단하게 말해 Main.php를 만들고 class를 설정하였다면 "URL/index.php/main"으로 접속 가능
//내부 function도 주소 확장, "URL/index.php/main"로 접속하였다면 function index()가 기본적으로 실행
//내부에 public function good() 함수를 추가하였다면 "URL/index.php/main/good"으로 실행

class Main extends CI_Controller {
  function __construct() {       
    parent::__construct();
  }

  // index 함수 설정은 "URL/index.php/main" 또는 "URL/index.php/main/index"로 접속가능하게 함
  public function index() {
    // $this->load->model 명령어는 /application/models 폴더를 탐색한다고 이해해도 됨
    // model('Main_model')에서 Main_model은 Main_model.php 파일을 찾겠다는 의미
    // $this->Main_model->test();는 로드된 Main_model.php에서 myDBtest 함수를 실행하겠다는 뜻
    $this->load->model('Main_model');
    $this->Main_model->myDBTest();
  }
}

model 파일 생성 (Main_model.php)

  • 실행할 model 파일 생성
  • 경로 application/models
  • 코드
<?php defined('BASEPATH') OR exit('No direct script access allowed');

class Main_model extends CI_model {

    function __construct(){ 
        parent::__construct(); 
        // 위에서 설정한 /application/config/database.php 파일에서 
        // $db['myDB'] 설정값을 불러오겠다는 뜻
        $this->test = $this->load->database('myDB', TRUE);
    } 
    
    function myDBTest() {
        // query 함수는 DB에 쿼리를 요청하는 것이며, 이 과정에서 오류가 뜨면 오류메시지 출력
        $this->test->query("SELECT * FROM myDB");   
        echo "이 메세지를 보았다면 성공";
    }
}

확인

잘 연결되었다....


mySQL

명령어 입력할때 ; 꼭 넣기

  • show databases
    생성한 database를 볼 수 있다

  • decs "테이블 이름"
    테이블의 구조를 볼 수 있다

  • show tables
    database에 생성한 table을 볼 수 있다

  • SELECT * FROM "테이블 이름"
    전체 컬럼 조회

  • drop database "데이터베이스 이름"

0개의 댓글