PHP / MariaDB / 데이터베이스 값 가져와서 출력하기

이 강좌에서 사용하는 데이터베이스는 employees입니다. (employees 설치 하기)

employees 출력하기 - employees.php

employees 테이블에는 직원 목록이 있습니다. 그 목록을 가져와서 출력해보겠습니다.

데이터베이스 연결 정보

employees 데이터베이스에 연결하기 위한 정보를 입력합니다. username과 password는 적절히 변경하세요.

$jb_conn = mysqli_connect( 'localhost', 'username', 'password', 'employees' );

쿼리 작성하기

employees 테이블에서 5개의 레코드를 가져오는 쿼리입니다.

$jb_sql = "SELECT * FROM employees LIMIT 5;";

값 저장하기

쿼리 결과를 담습니다.

$jb_result = mysqli_query( $jb_conn, $jb_sql );

출력하기

필요한 필드를 출력합니다.

while( $jb_row = mysqli_fetch_array( $jb_result ) ) {
  echo '<p>' . $jb_row[ 'emp_no' ] . $jb_row[ 'first_name' ] . $jb_row[ 'last_name' ] . $jb_row[ 'hire_date' ] . '</p>';
}

전체 코드

<!doctype html>
<html lang="ko">
  <head>
    <meta charset="utf-8">
    <title>Employees</title>
  </head>
  <body>
    <?php
      $jb_conn = mysqli_connect( 'localhost', 'username', 'password', 'employees' );
      $jb_sql = "SELECT * FROM employees LIMIT 5;";
      $jb_result = mysqli_query( $jb_conn, $jb_sql );
      while( $jb_row = mysqli_fetch_array( $jb_result ) ) {
        echo '<p>' . $jb_row[ 'emp_no' ] . $jb_row[ 'first_name' ] . $jb_row[ 'last_name' ] . $jb_row[ 'hire_date' ] . '</p>';
      }
    ?>
  </body>
</html>

표로 만들기

표로 출력하도록 변경한 코드입니다. HTML과 CSS만 바뀌었을 뿐, 데이터베이스를 불러오고 출력하는 것은 위와 같습니다.

<!doctype html>
<html lang="ko">
  <head>
    <meta charset="utf-8">
    <title>Employees</title>
    <style>
      body {
        font-family: Consolas, monospace;
        font-family: 12px;
      }
      table {
        width: 100%;
      }
      th, td {
        padding: 10px;
        border-bottom: 1px solid #dadada;
      }
    </style>
  </head>
  <body>
    <table>
      <thead>
        <tr>
          <th>emp_no</th>
          <th>first_name</th>
          <th>last_name</th>
          <th>hire_date</th>
        </tr>
      </thead>
      <tbody>
        <?php
          $jb_conn = mysqli_connect( 'localhost', 'username', 'password', 'employees' );
          $jb_sql = "SELECT * FROM employees LIMIT 5;";
          $jb_result = mysqli_query( $jb_conn, $jb_sql );
          while( $jb_row = mysqli_fetch_array( $jb_result ) ) {
            echo '<tr><td>' . $jb_row[ 'emp_no' ] . '</td><td>'. $jb_row[ 'first_name' ] . '</td><td>' . $jb_row[ 'last_name' ] . '</td><td>' . $jb_row[ 'hire_date' ] . '</td></tr>';
          }
        ?>
      </tbody>
    </table>
  </body>
</html>

연봉 출력하기 - salaries.php

salaries 테이블에는 연봉 정보가 있습니다. 직원은 emp_no로 연결되어 있습니다.

MariaDB [employees]> SELECT * FROM salaries LIMIT 5;
+--------+--------+------------+------------+
| emp_no | salary | from_date  | to_date    |
+--------+--------+------------+------------+
|  10001 |  60117 | 1986-06-26 | 1987-06-26 |
|  10001 |  62102 | 1987-06-26 | 1988-06-25 |
|  10001 |  66074 | 1988-06-25 | 1989-06-25 |
|  10001 |  66596 | 1989-06-25 | 1990-06-25 |
|  10001 |  66961 | 1990-06-25 | 1991-06-25 |
+--------+--------+------------+------------+
5 rows in set (0.00 sec)

emp_no 대신에 직원 이름을 출력하려면 JOIN을 이용합니다.

MariaDB [employees]> SELECT first_name, last_name, salary, from_date, to_date FROM salaries LEFT JOIN employees ON salaries.emp_no = employees.emp_no LIMIT 20;
+------------+-----------+--------+------------+------------+
| first_name | last_name | salary | from_date  | to_date    |
+------------+-----------+--------+------------+------------+
| Georgi     | Facello   |  60117 | 1986-06-26 | 1987-06-26 |
| Georgi     | Facello   |  62102 | 1987-06-26 | 1988-06-25 |
| Georgi     | Facello   |  66074 | 1988-06-25 | 1989-06-25 |
| Georgi     | Facello   |  66596 | 1989-06-25 | 1990-06-25 |
| Georgi     | Facello   |  66961 | 1990-06-25 | 1991-06-25 |
| Georgi     | Facello   |  71046 | 1991-06-25 | 1992-06-24 |
| Georgi     | Facello   |  74333 | 1992-06-24 | 1993-06-24 |
| Georgi     | Facello   |  75286 | 1993-06-24 | 1994-06-24 |
| Georgi     | Facello   |  75994 | 1994-06-24 | 1995-06-24 |
| Georgi     | Facello   |  76884 | 1995-06-24 | 1996-06-23 |
| Georgi     | Facello   |  80013 | 1996-06-23 | 1997-06-23 |
| Georgi     | Facello   |  81025 | 1997-06-23 | 1998-06-23 |
| Georgi     | Facello   |  81097 | 1998-06-23 | 1999-06-23 |
| Georgi     | Facello   |  84917 | 1999-06-23 | 2000-06-22 |
| Georgi     | Facello   |  85112 | 2000-06-22 | 2001-06-22 |
| Georgi     | Facello   |  85097 | 2001-06-22 | 2002-06-22 |
| Georgi     | Facello   |  88958 | 2002-06-22 | 9999-01-01 |
| Bezalel    | Simmel    |  65828 | 1996-08-03 | 1997-08-03 |
| Bezalel    | Simmel    |  65909 | 1997-08-03 | 1998-08-03 |
| Bezalel    | Simmel    |  67534 | 1998-08-03 | 1999-08-03 |
+------------+-----------+--------+------------+------------+
20 rows in set (0.00 sec)

다음은 이름과 함께 연봉을 출력하는 예제입니다.

<!doctype html>
<html lang="ko">
  <head>
    <meta charset="utf-8">
    <title>Employees</title>
    <style>
      body {
        font-family: Consolas, monospace;
        font-family: 12px;
      }
      table {
        width: 100%;
      }
      th, td {
        padding: 10px;
        border-bottom: 1px solid #dadada;
      }
    </style>
  </head>
  <body>
    <table>
      <thead>
        <tr>
          <th>first_name</th>
          <th>last_name</th>
          <th>salary</th>
          <th>from_date</th>
          <th>to_date</th>
        </tr>
      </thead>
      <tbody>
        <?php
          $jb_conn = mysqli_connect( 'localhost', 'username', 'password', 'employees' );
          $jb_sql = "SELECT * FROM salaries LEFT JOIN employees ON salaries.emp_no = employees.emp_no LIMIT 20;";
          $jb_result = mysqli_query( $jb_conn, $jb_sql );
          while( $jb_row = mysqli_fetch_array( $jb_result ) ) {
            echo '<tr><td>' . $jb_row[ 'first_name' ] . '</td><td>'. $jb_row[ 'last_name' ] . '</td><td>' . $jb_row[ 'salary' ] . '</td><td>' . $jb_row[ 'from_date' ] . '</td><td>' . $jb_row[ 'to_date' ] . '</td></tr>';
          }
        ?>
      </tbody>
    </table>
  </body>
</html>

PHP 강좌