ABOUT ME

Today
Yesterday
Total
  • AWS 활용 기초 #7. php를 활용하여 MySQL 연동
    클라우드/Amazon Web Service 2021. 6. 8. 22:47
    반응형

    1. DB 생성

     

     

    create database clouddb default character set utf8;
    
    create user 'test'@'%' identified by 'cloud';
    grant all privileges on clouddb.* to 'test'@'%';
    
    flush privileges;

     

     

    root 계정을 활용하는 것은 보안 상의 문제가 있을 수 있으므로 새로운 계정을 만들어 권한을 위임해준다.

     

    사용자 : test

    암호 : cloud

    데이터베이스 : clouddb

     

    2. 테이블 생성

     

    create table topic(
        id int not null AUTO_INCREMENt primary key,
        title varchar(100) null,
        description varchar(200) null,author varchar(100) null,
        created DATETIME NOT NULL
    );

     

    해당 쿼리를 작성하여 테이블을 확인한다.

     

    3. Data 입력

    INSERT INTO topic (id, title, description, author, created) VALUES
    (1, 'harry potter','magic is power', 'yeom', now()),
    (2, 'lord of the ring', 'ring is mine', 'yeom', now()),
    (3, 'venom', 'black venom is fighter', 'yeom', now()),
    (4, 'spiderman','spider is red', 'yeom', now());

    입력된 데이터를 확인한다.

     

    4. php와 MySQL 연동 라이브러리 설치

    sudo apt install php5.6-mysql
    sudo service mysql restart
    sudo apachectl restart

    Ubuntu Terminal에 다음과 같은 명령어를 입력해 php와 MySQL을 연동시켜준다.

     

    5. php로 데이터 입출력

    cd /var/www/html/
    sudo nano create.php

     

    create.php

    <?php
    $conn = mysqli_connect(
      '#{본인의 RDS 엔드포인트}', // 자신의 엔드포인트 주소로 변경해야함
      'test',
      'cloud',
      'clouddb'); // 데이터베이스 이름
    
    $sql = "SELECT * FROM topic";
    $result = mysqli_query($conn, $sql);
    
    ?>
    <!doctype html>
    <html>
      <head>
        <meta charset="utf-8">
        <title>WEB</title>
      </head>
      <body>
        <h1>KPU University</h1>
        <h3> 원하는 책의 제목 본문 저자를 입력하세요. </h3>
        <form action="process_create.php" method="POST">
          <p><input type="text" name="title" placeholder="제목 (ex)Harry Porter"></p>
          <p><input type="text" name="description" placeholder="본 문  (ex)magic stone"></p>
          <p><input type="text" name="author" placeholder="저자  (ex)rolling"></p>
          <p><input type="submit"></p>
        </form>
      </body>
    </html>

    해당 디렉토리로 이동하여 create.php를 생성하자.

     

    sudo nano process_create.php

    process_create.php

    <?php
    $conn = mysqli_connect(
      '#{본인의 RDS 엔드포인트}',
      'test',
      'cloud',
      'clouddb');
      # title, description 이라는 사용자가 입력한 정보를 그대로 php에 입력하는 행위는 보안에 취약, 따라서 관리 필요
    
      $filtered = array(
        'title'=>mysqli_real_escape_string($conn, $_POST['title']),
        'description'=>mysqli_real_escape_string($conn, $_POST['description']),
        'author'=>mysqli_real_escape_string($conn, $_POST['author'])
      );
    
    $sql = "
      INSERT INTO topic
        (title, description, author, created)
        VALUES(
          '{$filtered['title']}',
          '{$filtered['description']}',
          '{$filtered['author']}',
            NOW()
        )
    ";
    $result = mysqli_query($conn, $sql);
    if($result === false){
      echo '저장하는 과정에서 문제가 생겼습니다. 관리자에게 문의해주세요';
      error_log(mysqli_error($conn));
    } else {
      echo '성공했습니다. <a href="create.php">돌아가기</a>';
    }
    ?>

    create.php와 같은 폴더에 process_create.php도 생성하자.

     

    6. php로 데이터 입출력 확인

     

    http://#{EC2의 IPv4}/create.php 로 접속한다.

    해당 폼에 값을 입력하고 데이터베이스를 확인했을때 다음과 같이 값이 보이면 정상적으로 등록된 것이다.

     

    반응형
Designed by Tistory.