[PHP] 데이터 베이스(mariaDB)를 연결해서 사용하는 방법


Study/PHP  2019. 9. 20. 09:00

안녕하세요. 명월입니다.


이 글은 PHP에서 데이터 베이스(mariaDB)를 연결해서 사용하는 방법에 대한 글입니다.


웹 프로그래밍하면 당연히 데이터 베이스를 연결해서 사용할 것입니다. 물론 데이터를 엑셀이나 파일로 관리해서 사용할 수 없는 것은 아니지만, 데이터 베이스만큼 데이터 관리가 편한 프로그램이 없기 때문에 데이터 베이스를 사용할 것입니다.

데이터 베이스의 종류는 Oracle이던가 Mssql, mysql 등등 여러가지가 많이 있습니다만 여기서는 mariaDB(mysql)를 사용하겠습니다.

참고로 mariaDB 설치와 query분석기(DBeaver)설치는 생략하겠습니다.


링크 - https://mariadb.org

링크 - Dbeaver (무료 데이터 베이스 접속 툴)


다른 데이터 베이스도 사용방법은 거의 비슷할 것입니다.

먼저 데이터 베이스를 사용하기 위해서는 php.ini을 수정해야 합니다.

php.ini를 보면 중간에 extension=mysqli가 있는데 이 부분의 주석(;)을 제거하고 아파치를 재기동합니다.

그리고 phpinfo()로 확인하면 중간에 mysqli가 로드된 것을 알 수 있습니다.

그리고 먼저 php에서 접속을 확인할 수 있게 테이블을 만들고 데이터를 넣어보겠습니다.

<?php
  // 데이터 베이스로부터 받은 데이터를 담을 클래스
  class Node
  {
    private $idx;
    private $data;
    public function __construct($idx, $data)
    {
      $this->idx = $idx;
      $this->data = $data;
    }
    public function getIdx()
    {
      return $this->idx;
    }
    public function getData()
    {
      return $this->data;
    }
  }
  
  // 데이터 베이스 정보
  $hostname = "localhost";
  $username = "root";
  $password = "";
  $dbname = "blogTest";

  $rslt = array();
  
  // mysql 접속한다.
  $conn = mysqli_connect($hostname, $username, $password, $dbname);
  try{
    // 데이터 베이스를 선택한다.
    mysqli_select_db($conn,$dbname);
    // 쿼리를 보내 결과를 받는다.
    $rs = mysqli_query($conn,"select * from testTable");
    // 결과는 List형식으로 오는데 iterator 패턴을 이용해 데이터 값을 받는다.
    while($rst = mysqli_fetch_assoc($rs)){
      // List에 데이터를 new해서 넣는다.
      array_push($rslt, new Node($rst["idx"], $rst["data"]));
    }
  }
  catch ( Exception $e ) {
    die ( $e );
  } finally {
    mysqli_close($conn);
  }
?>
<!DOCTYPE html>
<html>
<head>
<title>title</title>
</head>
<body>
  <?php 
    // 데이터 베이스로부터 받은 데이터를 출력
    foreach($rslt as $value){
       echo $value;
       echo "<br />";
    }
  ?>
</body>
</html>

먼저 mysqli_connect으로 커넥션을 만듭니다. 그리고 데이터 베이스를 선택합니다. 이는 쿼리로 치면 「use 데이터 베이스」와 같습니다.

그리고 mysqli_query 함수로 쿼리를 보내고 결과를 받습니다.


여기서 저는 mysqli_fetch_assoc 함수를 사용했는데, mysqli_fetch_row로도 받을 수 있습니다.

이는 일반 배열인가 연관 배열인가의 차이인데, mysqli_fetch_row는 일반 배열이고 mysqli_fetch_assoc는 연관 배열로 받습니다.

PHP에서는 연관 배열로 생성되도 일반 배열처럼 데이터를 취득할 수 있기 때문에, 개인적으로 mysqli_fetch_assoc가 더 좋지 않나 생각됩니다.

참조 - [출처] PHP MySQL 레코드 가져오기 (mysqli_fetch_assoc)|작성자 창공


데이터 베이스도 IO처럼 리소스를 사용했으면 close로 리소스 반환을 해야 합니다. 그렇지 않으면 계속 데이터베이스가 연결된 상태가 되어 버리기 때문에 성능상에 문제가 생길 수 있습니다.


참조 - https://www.php.net/manual/en/function.mysqli-connect.php

참조 - https://www.php.net/manual/en/mysqli.select-db.php

참조 - https://www.php.net/manual/en/mysqli.query.php

참조 - https://www.php.net/manual/en/mysqli-result.fetch-assoc.php

참조 - https://www.php.net/manual/en/mysqli.close.php


여기까지 PHP에서 데이터 베이스(mariaDB)를 연결해서 사용하는 방법에 관한 설명이었습니다.


궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.