380 likes | 978 Views
8. 데이터베이스를 이용해 게시판 만들기. MySQL API 에서는 MySQL 내장 함수를 제공한다. MySQL API 다루기. 1. 이 장에서 다룰 내용. 미니 게시판 만들기. 2. 01. MySQL API 다루기. SQL API MySQL 데이터베이스를 사용할 수 있도록 PHP 에서 제공하는 함수 MySQL 을 연결 · 종료하는 API 와 데이터베이스에 데이터를 추가 · 삭제 · 수정하는 SQL 쿼리 API 로 구성 MySQL 연결 / 종료 API.
E N D
8 데이터베이스를 이용해 게시판 만들기 MySQL API에서는 MySQL 내장 함수를 제공한다.
MySQL API 다루기 1 이 장에서 다룰 내용 미니 게시판 만들기 2
01. MySQL API 다루기 • SQL API • MySQL 데이터베이스를 사용할 수 있도록 PHP에서 제공하는 함수 • MySQL을 연결·종료하는 API와 데이터베이스에 데이터를 추가·삭제·수정하는 SQL 쿼리 API로 구성 • MySQL 연결/종료 API
01. MySQL API 다루기 • SQL 쿼리 API
01. MySQL API 다루기 • MySQL 연결/종료 함수 • mysql_connect 함수 • 서버나 데이터베이스에 연결하는 함수 • 접속 권한이 있는 사용자 정보를 인자로 받아 서버와 데이터베이스에 연결하는 함수 • mysql : MySQL에 접속하는 명령문 • -u : 사용자 ID • -p : 비밀번호 • -h : 호스트이름
01. MySQL API 다루기 • MySQL 연결/종료 함수 • mysql_connect 함수 • 성공적으로 연결하면 식별자 번호를 반환하고, 실패하면 False를 반환 • 연결에 실패하면 반환값을 이용해 오류 메시지를 표시하면서 종료 • hostname : 서버의 호스트 이름 또는 호스트 이름:포트번호 • 예:localhost 또는 localhost:80 • username : 사용자 ID • password : 비밀번호 • databaseName : 데이터베이스 이름 resource mysql_connect(string hostname [:port], string username, string password, string databaseName);
01. MySQL API 다루기 기본예제 8-1 localhost 서버에 연결하기 01 02 03 04 05 06 07 08 09 10 11 12 13 <? $mydb = mysql_connect("localhost", "root", "php123"); if(!$mydb) { print("MySQL 연결을 실패하였습니다.<br>"); die("PHP를 강제 종료합니다."); } else { print("MySQL에 정상적으로 연결되었습니다."); } ?>
01. MySQL API 다루기 응용예제 8-2 localhost 서버에 있는 mydb 데이터베이스에 연결하기 01 02 03 04 05 06 07 <? $mydb = mysql_connect( ); if(!$mydb) die("PHP에 연결할 수 없습니다."); else print("MySQL에 정상적으로 연결되었습니다."); ?>
01. MySQL API 다루기 • MySQL 연결/종료 함수 • mysql_close 함수 • 연결된 데이터베이스를 해제하는 함수 • mysql_connect( )로 연결한 MySQL은 웹 페이지의 스크립트를 모두 처리하면 자동으로 종료하나, mysql_close()를 이용하면 임의의 위치에서 MySQL 연결을 종료할 수 있다. • $link_identifier : mysql_connect()로 반환된 값 • mysql_close()는 성공적으로 연결이 종료되면 True를, 실패하면 False를 반환 bool mysql_close([resource $link_identifier]); 기본예제 8-3 mysql_close 함수 사용하기 01 02 03 04 05 06 07 08 <? $mydb = mysql_connect("localhost", "root", "php123"); if(!$mydb) die("MySQL에 연결할 수 없습니다."); else print("MySQL에 연결되었습니다."); mysql_close($mydb); ?>
01. MySQL API 다루기 • MySQL 연결/종료 함수 • mysql_select_db 함수 • 열린 서버에서 특정 데이터베이스를 활성화할 때 사용 • 사용 중인 데이터베이스를 변경 • 사용자 권한을 바탕으로 연결된 데이터베이스를 다른 데이터베이스로 변경한다. • 반환값으로 성공하면 True를, 실패하면 False를 반환 • $database_name : 선택할 데이터베이스 이름 • $link_identifier : mysql_connect()로 반환된 값 bool mysql_select_db(string $database_name [, resource $link_identifier]);
01. MySQL API 다루기 기본예제 8-4 mysql_select_db 함수 사용하기 01 02 03 04 05 06 07 08 09 10 11 • <? • $mydb = mysql_connect("localhost", "root", "php123", "mydb"); • if($mydb) • { • if(mysql_select_db('dbtest', $mydb)) • print("데이터베이스가 성공적으로 변경되었습니다."); • } • else • print("데이터베이스를 변경할 수 없습니다."); • mysql_close($mydb); • ?>
01. MySQL API 다루기 • SQL 쿼리 함수 • mysql_query 함수 • 연결한 데이터베이스에서 SQL 명령문을 실행하는 함수 • 데이터베이스에 있는 테이블에 접속하여 SQL 쿼리에 만족하는 결과값을 얻을 수 있다. • 성공하면 True를, 실패하면 False를 반환 • $query • 실행할 SQL 명령문 • 세미콜론(;)으로 끝나지 않는 문자열 • SQL 명령어인 SELECT, SHOW, DESCRIBE, EXPLAIN은 성공적으로 처리하면 데이터를 전달하고, 실패하면 False를 반환 • $link_identifier : mysql_connect()로 반환된 값 resource mysql_query(string $query [, resource $link_identifier]);
01. MySQL API 다루기 기본예제 8-5 mysql_query 함수 사용하기 01 02 03 04 05 06 07 08 09 10 11 12 13 <? $mydb = mysql_connect("localhost", "root", "php123"); if(!mysql_select_db('mydb', $mydb)) die("데이터베이스를 선택할 수 없습니다."); $result = mysql_query('SELECT * FROM userdb'); if(!$result) die('SQL 오류 발생 : ' . mysql_error($mydb)); echo "쿼리 성공<br>"; mysql_close($mydb); ?>
01. MySQL API 다루기 • SQL 쿼리 함수 • mysql_num_rows와 mysql_num_fields 함수 • SQL을 수행한 결과 행과 필드의 개수를 반환 • SQL 명령어의 SELECT 구문에서만 결과값을 얻을 수 있다. • $result : mysql_query() 함수를 호출한 결과의 resource int mysql_num_rows(resource $result); int mysql_num_fields(resource $result);
01. MySQL API 다루기 기본예제 8-6 mysql_num_rows와 mysql_num_fields 함수 사용하기 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 • <? • $mydb = mysql_connect("localhost", "root", "php123"); • if(!mysql_select_db('mydb', $mydb)) • die("데이터베이스를 선택할 수 없습니다."); • $result = mysql_query('SELECT * FROM userdb'); • if($result) • { • echo "쿼리 성공<br>"; • echo "행의 개수 :" . mysql_num_rows($result)."<br>"; • echo "필드의 개수 :" . mysql_num_fields($result)."<br>"; • } • else • die('SQL 오류 발생 : ' . mysql_error($mydb)); • mysql_close($mydb); • ?>
01. MySQL API 다루기 • SQL 쿼리 함수 • 결과값 출력하기 • mysql_fetch_row() • mysql_fetch_array() • mysql_fetch_object() • mysql_result() • $result : mysql_query() 함수를 호출한 결과의 resource • $result_type • 함수를 정상적으로 수행한 후 반환할 배열의 형태로, • 기술할 수 있는 상수로는 MYSQL_ASSOC, MYSQL_NUM, MYSQL_BOTH가 있다. • 기본값은 MYSQL_BOTH다. • $row : 검색된 결과에서 행번호를 기술하며, 행번호는 0부터 시작한다. • $field : 검색을 위한 필드의 오프셋이나 이름이다. array mysql_fetch_row(resource $result); array mysql_fetch_array(resource $result [, int $result_type]); object mysql_fetch_object(resource $result); string mysql_result(resource $result, int $row [, mixed $field]);
01. MySQL API 다루기 • SQL 쿼리 함수(결과값 출력하기) • mysql_fetch_row() • 결과값에서 한 행 단위로 데이터값을 가져옴 • 한 행의 값을 $row배열에 저장 • $row의 첨자를 변경하여 한 행의 값을 표시할 수 있다. • 첨자는 0부터 시작 • mysql_fetch_array 함수 • 결과값에서 한 행의 데이터를 필드 이름의 첨자를 갖는 배열로 반환 • 한 행의 데이터가 $arr 배열로 저장됨 • $arr[name] 형태로 사용하거나 $arr[0]처럼 사용할 수도 있음. while($row = mysql_fetch_row($result)) { echo("$row[0] | $row[1] | $row[2] | $row[3] | $row[4]<br>"); } while($arr = mysql_fetch_array($result)) { echo("$arr[name] | $arr[eng] | $arr[mat] | $arr[lan] | $arr[his]<br>"); }
01. MySQL API 다루기 • SQL 쿼리 함수(결과값 출력하기) • mysql_fetch_object 함수 • 결과값에서 한 행의 데이터를 오브젝트(객체) 형태로 가져온다. • $obj ->name 형태로 사용할 수 있다. • mysql_result 함수 • 결과값에서 지정한 필드값을 가져온다. • 행 위치값과 필드 위치값을 전달하면 데이터를 반환한다. while($obj = mysql_fetch_object($result)) { echo("$obj->name | $obj->eng | $obj->mat | $obj->lan | $obj->his<br>"); } • for($i = 0; $i < mysql_num_rows($result); $i++) • { • for($j = 0; $j < mysql_num_fields($result); $j++) • { • $value = mysql_result($result, $i, $j); • echo("$value |"); • } • echo("<br>"); • }
01. MySQL API 다루기 기본예제 8-7 mysql_fetch_row 함수 사용하기 ① 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 <? $mydb = mysql_connect("localhost", "root", "php123”); mysql_query("set names euckr"); if(!mysql_select_db('mydb', $mydb)) die("데이터베이스를 선택할 수 없습니다."); $result = mysql_query('SELECT * FROM userdb'); if($result) { while($row = mysql_fetch_row($result)) echo("$row[0] | $row[1] | $row[2] | $row[3] | $row[4]<br>"); } else die('SQL 오류 발생 : ' . mysql_error($mydb)); mysql_close($mydb); ?>
01. MySQL API 다루기 기본예제 8-8 mysql_fetch_row 함수 사용하기 ② 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 <? $host = "localhost"; $user = "root"; $password = "php123"; $mydb = mysql_connect($host, $user, $password); mysql_query("set names euckr"); if(!mysql_select_db('mydb', $mydb)) die("데이터베이스를 선택할 수 없습니다."); $result = mysql_query('SELECT * FROM userdb'); if($result) { for($i = 0; $i < mysql_num_rows($result); $i++) { for($j = 0; $j < mysql_num_fields($result); j++) { $value = mysql_result($result, $i, $j); echo("$value |"); } echo("<br>"); } } 24 25 26 27 else die('SQL 오류 발생 : ' . mysql_error($mydb)); mysql_close($mydb); ?>
01. MySQL API 다루기 • 기타 MySQL API
01. MySQL API 다루기 • 기타 MySQL API
01. MySQL API 다루기 • MySQL 코드구조
02. 미니 게시판 만들기 • 게시판에 필요한 테이블 만들기 • phpMyAdmin을 실행한다. • 사용자 : root • 암호 : php123 • mydb를 선택한다(mydb 데이터베이스가 없으면 새로 만든다). • 데이터베이스 mydb에 새로운 테이블을 만든다. • 이름란에‘board’, Number of fields란에‘3’을 입력하고, <실행> 버튼을 누른다.
02. 미니 게시판 만들기 • board 테이블에 uid, title, content 필드를 만들어 다음과 같이 속성값을 지정한다. 모든 입력이 완료되면 <저장> 버튼을 눌러 저장한다.
02. 미니 게시판 만들기 • 작성 페이지 만들기 기본예제 8-9 미니 게시판 만들기 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 <? echo(“ <html> <head> <title>미니 게시판 만들기</title> </head> <body> <center> <form method=post action='ch08ex10.php'> <table> <tr> <td width=50>제목</td> <td valign=middle width=200> <input type=text size=70 name=title> </td> </tr> <tr> <td valign=top>내용</td> <td> <textarea cols=69 rows=10 name=content> 내용 입력</textarea> </td> </tr> 24 25 26 27 28 29 30 31 32 33 </table> <input type=submit value='글 올리기'> <input type=reset value='취소'> </form> <br> </center> </body> </html> "); ?>
02. 미니 게시판 만들기 • 전달된 데이터 저장하기 • 전달된 데이터 표시하기 기본예제 8-10 수신한 내용 확인하기 01 02 03 04 05 06 07 <? echo "수신한 내용<br>"; $title = htmlspecialchars($_POST['title']); echo $title . "<br>"; $content = htmlspecialchars($_POST['content']); echo $content . "<br>"; ?>
02. 미니 게시판 만들기 • 데이터베이스에 저장하기 기본예제 8-11 데이터베이스에 저장하기 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 <? echo "수신한 내용<br>"; $title = htmlspecialchars($_POST['title']); echo $title . "<br>"; $content = htmlspecialchars($_POST['content']); echo $content . "<br>"; $host = "localhost"; $user = "root"; $password = "php123"; $mydb = mysql_connect($host, $user, $password) or die("MySQL에 연결할 수 없습니다."); if(!mysql_select_db('mydb', $mydb)) die("데이터베이스를 선택할 수 없습니다."); $sql = "INSERT INTO board(uid, title, content) VALUES(NULL, '$title', '$content')"; mysql_query($sql, $mydb); mysql_close($mydb); print ("board 테이블에 데이터 추가했습니다."); ?>
02. 미니 게시판 만들기 • 데이터베이스 내용 확인 기능 구현하기 기본예제 8-12 데이터베이스 내용 확인하기 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 <? echo "데이터베이스의 내용 출력<br>"; $host = "localhost"; $user = "root"; $password = "php123"; $mydb = mysql_connect($host, $user, $password); $db_id = mysql_select_db('mydb', $mydb); $sql = "SELECT * FROM board"; $result = mysql_query($sql, $mydb); $total_record = mysql_num_rows($result); echo "total_record=".$total_record."<p>"; while($row_array = mysql_fetch_array($result)) { echo("$row_array[uid] | $row_array[title] | row_array[content]<br>"); } mysql_close($mydb); ?>
02. 미니 게시판 만들기 • 수정 가능한 데이터 확인하기 기본예제 8-13 수정 가능한 데이터 확인하기 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 <? echo "데이터베이스의 내용 출력<br>"; $host = "localhost"; $user = "root"; $password = "php123"; $mydb = mysql_connect($host, $user, $password); mysql_query("set names euckr"); $db_id = mysql_select_db('mydb', $mydb); $sql = "SELECT * FROM board"; $result = mysql_query($sql, $mydb); $total_record = mysql_num_rows($result); echo "total_record=".$total_record."<p>"; while($row_array = mysql_fetch_array($result)) { echo("$row_array[uid] | $row_array[title] | $row_array[content] | <a href='ch08ex14.php?uid=$row_array[uid]'>수정</a><br>"); } mysql_close($mydb); ?>
02. 미니 게시판 만들기 • 사용자 수정 페이지 기본예제 8-14 데이터 수정 페이지확인하기(1) 01 02 03 04 05 06 07 08 09 10 11 13 14 15 16 17 18 19 20 21 <? echo "수신한 내용 : "; $uid = $_GET['uid']; echo $uid . "<br>"; $host = "localhost"; $user = "root"; $password = "php123"; $mydb = mysql_connect($host, $user, $password); mysql_query("set names euckr"); $db_id = mysql_select_db('mydb', $mydb); $sql = "SELECT * FROM board WHERE uid = $uid"; $result = mysql_query($sql, $mydb); $row_array = mysql_fetch_array($result); echo(“ <html> <head> <title>미니 게시판 만들기</title> </head> 22 23 24 25 26 27 28 29 30 31 <body> <center> <form method=post action='ch08ex15.php'> <table> <tr> <td width=50>제목</td> <td valign=middle width=200> <input type=text size=70 name=title value='$row_array[title]'> </td> </tr>
02. 미니 게시판 만들기 • 사용자 수정 페이지 기본예제 8-14 데이터 수정 페이지확인하기(2) 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 <tr> <td valign=top>내용</td> <td> <textarea cols=69 rows=10 name=content> $row_array[content]</textarea> </td> </tr> </table> <input type=hidden name=uid value=$uid> <input type=submit value='수정하기'> <input type=reset value='취소'> </form> <br> </center> </body> </html> "); ?>
02. 미니 게시판 만들기 • 사용자 수정 페이지 기본예제 8-15 수정한 데이터 저장하기 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 <? echo "수신한 내용<br>"; $title = htmlspecialchars($_POST['title']); echo $title . "<br>"; $content = htmlspecialchars($_POST['content']); echo $content . "<br>"; $uid = $_POST['uid']; echo $uid . "<br>"; $host = "localhost"; $user = "root"; $password = "php123"; $mydb = mysql_connect($host, $user, $password) or die("MySQL을 연결할 수 없습니다."); if(!mysql_select_db('mydb', $mydb)) die("데이터베이스를 선택할 수 없습니다"); $sql = "UPDATE board SET title = '$title', content = '$content' WHERE uid = $uid"; mysql_query($sql, $mydb); echo(mysql_error($mydb)); 21 22 23 24 25 26 27 28 29 30 31 32 $sql = "SELECT * FROM board"; $result = mysql_query($sql, $mydb); echo(mysql_error($mydb)); $total_record = mysql_num_rows($result); echo "total_record=".$total_record."<p>"; while($row_array = mysql_fetch_array($result)) { echo("$row_array[uid] | $row_array[title] | $row_array[content] | <a href='ch08ex14.php?uid=$row_array[uid]'> 수정</a><br>"); } mysql_close($mydb); ?>
02. 미니 게시판 만들기 기본예제 8-16 삭제 가능한 데이터 확인하기 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 <? echo "데이터베이스의 내용 출력<br>"; $host = "localhost"; $user = "root"; $password = "php123"; $mydb = mysql_connect($host, $user, $password); $db_id = mysql_select_db('mydb', $mydb); $sql = "SELECT * FROM board"; $result = mysql_query($sql, $mydb); $total_record = mysql_num_rows($result); echo "total_record=".$total_record."<p>"; while($row_array = mysql_fetch_array($result)) { echo("$row_array[uid] | $row_array[title] | $row_array[content] | <a href='ch08ex17.php?uid=$row_array[uid]'>삭제</a><br>"); } mysql_close($mydb); ?>
02. 미니 게시판 만들기 • 데이터 삭제 기능 기본예제 8-17 데이터 삭제하기 01 02 03 04 05 06 07 08 09 10 11 12 13 14 <? $uid = $_GET['uid']; $host = "localhost"; $user = "root"; $password = "php123"; $mydb = mysql_connect($host, $user, $password); $db_id = mysql_select_db('mydb', $mydb); $sql = "DELETE FROM board WHERE uid = $uid"; $result = mysql_query($sql, $mydb); if(result) echo "uid=" . $uid . "데이터가 삭제되었습니다.<br>"; mysql_close($mydb); ?>
테이블을 이용해 게시판 리스트 만들기 18 예제 설명 • 게시판에서 삭제 가능한 리스트를 테이블을 이용해 깔끔하게 표현한다. 실행결과
수정과 삭제가 가능한 게시판 리스트 만들기 19 예제 설명 • [예제모음 18]에 코드를 추가하여 하나의 게시판 리스트에서 게시물을 수정·삭제할 수 있는 리스트 페이지를 만든다. 실행결과
Thank You 8장 데이터베이스를 이용해 게시판 만들기