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>