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

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

employees 출력하기

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

데이터베이스 연결 정보

employees 데이터베이스에 연결하기 위한 정보를 입력합니다. localhost, 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
              '<p>'
              . $jb_row[ 'emp_no' ]
              . $jb_row[ 'first_name' ]
              . $jb_row[ 'last_name' ]
              . $jb_row[ 'hire_date' ]
              . '</p>'
            ;
          }
        ?>
      </tbody>
    </table>
  </body>
</html>

결과가 하나인 경우

다음의 쿼리는 first_name이 Georgi인 사람의 수를 구하는 것입니다. 따라서 결과가 숫자 하나로 나옵니다.

SELECT COUNT( emp_no ) AS Number
FROM employees
WHERE first_name = 'Georgi'
;

그런 경우 while 문을 사용하지 않고 바로 출력할 수 있습니다.

<!doctype html>
<html lang="ko">
  <head>
    <meta charset="utf-8">
    <title>PHP</title>
    <style>
      body { 
        font-family: Consolas, monospace;
      }
    </style>
  </head>
  <body>
    <?php
      error_reporting( E_ALL ); ini_set( "display_errors", 1 );
      $db_conn = mysqli_connect( 'localhost', 'codingfactory', '1qaz2wsx!@', 'employees' );
      $sql = "
        SELECT COUNT( emp_no ) AS Number
        FROM employees
        WHERE first_name = 'Georgi'
        ;
      ;";
      $result = mysqli_query( $db_conn, $sql );
      $row = mysqli_fetch_array( $result );
      echo $row[ "Number" ];
    ?>
  </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 / 함수 / implode() / 배열을 하나의 문자열로 만드는 함수

PHP / 함수 / implode() / 배열을 하나의 문자열로 만드는 함수

개요 implode()는 배열에 속한 문자열을 하나의 문자열로 만드는 함수입니다. PHP 4 이상에서 사용할 수 있습니다. 문법 implode ( glue, pieces ) glue : 배열의 원소 사이에 들어갈 문자열입니다. pieces : 배열입니다. $jbary = array( 'one', 'two', 'three' ); $jbstr = implode( '/', $jbary ); 원소 사이에 /을 넣어 하나의 문자열로 만듭니다. 즉 $jbstr은 one/two/three입니다. 예제 <!doctype html> <html lang="ko"> <head> <meta charset="utf-8"> <title>PHP</title> <style> body { font-family: ...

PHP / addslashes(), stripslashes()

PHP / addslashes(), stripslashes()

addslashes() 작은 따옴표, 큰 따옴표, 백슬래시 앞에 백슬래시를 추가한다. 즉, PHP 'PHP' "PHP"를 PHP \'PHP\' \"PHP\"로 변경한다. <!doctype html> <html lang="ko"> <head> <meta charset="utf-8"> <title>PHP</title> <style> * { font-family: "Consolas", monospace; ...

PHP / 에러 출력하는 방법, 에러 출력하지 않는 방법

PHP / 에러 출력하는 방법, 에러 출력하지 않는 방법

PHP 코딩을 하고 웹 브라우저에서 실행을 시킵니다. 그런데 원하는 결과가 나오지 않거나 '페이지를 표시할 수 없습니다' 같은 메시지가 나오는 경우가 있습니다. 반대로 결과를 도출하는 데는 문제가 없으나 에러 메시지가 나오는 경우가 있습니다. 보통 개발 과정에서는 어떤 에러든 표시하는 게 좋고, 서비스 중이라면 왠만한 에러는 보이지 않는 게 좋습니다. 어떻게 에러 표시 여부를 ...

PHP / 반복문 / while, do-while, for

PHP / 반복문 / while, do-while, for

while 문법 while ( condition ) {   statement; } condition을 만족할 때까지 중괄호 안에 있는 statement를 실행합니다. 중괄호 대신 콜론(:)과 endwhile을 사용할 수도 있습니다. while ( condition ) :   statement; endwhile; 예제 <?php   $i = 1; // 초기값 설정   while ( $i < 10 ) ...

PHP / 함수 / password_hash() / 비밀번호 암호화하는 함수

PHP / 함수 / password_hash() / 비밀번호 암호화하는 함수

개요 password_hash()는 비밀번호를 암호화해주는 함수입니다. 입력한 값이 암호화된 비밀번호와 맞는지 확인하는 것은 password_verify() 함수로 합니다. 문법 password_hash ( string $password , int $algo ) $password 암호화할 문자열입니다. $algo 암호화 알고리즘을 정합니다. PASSWORD_DEFAULT : bcrypt 알고리즘을 사용합니다. PASSWORD_BCRYPT : CRYPT_BLOWFISH 알고리즘을 사용합니다. PASSWORD_ARGON2I : Argon2i hashing 알고리즘을 사용합니다. PHP를 Argon2를 사용할 수 있도록 설치한 경우에 사용 가능합니다. PASSWORD_ARGON2ID ...

PHP / 함수 / isset() - 설정된 변수인지 확인하는 함수

PHP / 함수 / isset() - 설정된 변수인지 확인하는 함수

개요 isset으로 변수가 설정되었는지 확인할 수 있습니다. PHP 4 이상에서 사용할 수 있습니다. 문법 isset( $var ); $var가 설정되었는지 확인하고, 설정되었으면 TRUE, 설정되지 않았으면 FALSE를 반환합니다. isset( $var1, $var2, ... ); $var1, $var2, …이 설정되었는지 확인합니다. 모든 변수가 설정되었으면 TRUE, 그렇지 않다면 FALSE를 반환합니다. 예제 <!doctype html> <html lang="ko"> <head> <meta charset="utf-8"> <title>Coding ...

PHP / 함수 / phpversion() / PHP 버전 출력하는 함수

PHP / 함수 / phpversion() / PHP 버전 출력하는 함수

개요 phpversion으로 PHP의 버전을 확인할 수 있습니다. PHP 4 이상에서 사용할 수 있습니다. 문법 phpversion() PHP의 버전을 문자열로 반환합니다. 예제 <!DOCTYPE html> <html lang="ko"> <head> <meta charset="utf-8"> <title>phpversion</title> </head> <body> <?php echo '<p>PHP current version is ' . phpversion() . '</p>'; ...

PHP / Ubuntu / Apache / HTML 확장자에도 PHP 코드 인식되도록 설정하는 방법

PHP / Ubuntu / Apache / HTML 확장자에도 PHP 코드 인식되도록 설정하는 방법

Ubuntu에 Apache로 웹서버를 만들고 PHP를 사용할 수 있게 만든 경우, 기본적으로 확장자가 php인 경우에만 PHP 코드를 인식합니다. 만약 확장자가 html일 때로 PHP 코드가 인식되도록 하고 싶다면, Apache 설정을 바꿔줘야 합니다. /etc/apache2/mods-enabled/mime.conf 파일을 엽니다. 다음 코드를 추가합니다. AddType application/x-httpd-php .html 확장자가 htm인 경우에도 PHP를 인식하도록 하고 싶다면 다음처럼 합니다. AddType application/x-httpd-php .html .htm 웹서버를 다시 로드합니다. service apache2 ...

PHP / 반복문 / foreach

PHP / 반복문 / foreach

foreach는 배열의 각 값에 대하여 반복 작업을 합니다. 문법 foreach ( array_expression as $value ) { statement; } foreach ( array_expression as $value ) : statement; endforeach; 예제 배열 jba의 각 값을 변수 jbv에 넣습니다. 변수 jbv를 두 배하고 1을 뺀 값을 변수 jbr에 넣습니다. 변수 jbr을 출력합니다. <!doctype html> <html lang="ko"> <head> <meta charset="utf-8"> ...

PHP / 회원 관리 / 회원 가입 페이지, 회원 가입 완료 페이지

PHP / 회원 관리 / 회원 가입 페이지, 회원 가입 완료 페이지

환경 로컬 서버에 설치된 MariaDB를 사용합니다.(특별한 케이스가 아니라면 MySQL에서도 잘 작동합니다.) 데이터베이스 이름은 codingfactory.net_example, 사용자이름은 codingfactory, 비밀번호는 1234qwer입니다. 테이블 만들기 id, username, password 세 개의 열을 가진 member 테이블을 만듭니다. id는 자동 증가하는 고유값을 가지는 키입니다. MariaDB > create table member ( -> id INT AUTO_INCREMENT PRIMARY KEY, -> username ...