MySQL API에서는 MySQL 내장 함수를 제공한다. 데이터베이스를 이용해 게시판 만들기 8 MySQL API에서는 MySQL 내장 함수를 제공한다.
이 장에서 다룰 내용 MySQL API 다루기 1 2 미니 게시판 만들기
01. MySQL API 다루기 SQL API MySQL 데이터베이스를 사용할 수 있도록 PHP에서 제공하는 함수 기능 PHP 함수 사용 예 서버 mysql_connect( ) mysql_connect($host, $user, $password); 서버 연결 종료 mysql_close( ) mysql_close($mydb); 데이터베이스 선택 mysql_select_db( ) mysql_select_db('mydb', $mydb);
01. MySQL API 다루기 SQL 쿼리 API 기능 PHP 함수 사용 예제 SQL 쿼리문 처리 mysql_query( ) mysql_query($sql, $mydb); 결과 행 수 mysql_num_rows( ) mysql_num_rows($result); 결과 필드 수 mysql_num_fields( ) mysql_num_fields($result); 결과값 얻기 mysql_fetch_row( ) mysql_fetch_row($result); mysql_fetch_array( ) mysql_fetch_array($result); mysql_fetch_object( ) mysql_fetch_object($result); mysql_result( ) mysql_result($result, $row, $field);
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 함수 성공하면 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 명령어의 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 기능 PHP 함수 mysql_errno mysql_error 가장 최근에 실행된 MySQL 쿼리에 에러가 발생했을 때, 해당 에러에 대한 메시지를 반환한다. mysql_create_db 데이터베이스에 지정한 이름의 데이터베이스를 생성한다. mysql_drop_db 데이터베이스에 지정한 이름의 데이터베이스를 제거한다. mysql_pconnect mysql_connect( ) 함수와 동일한 역할을 하는 함수이나, 스크립트 실행이 종료되어도 서버에 대한 연결을 계속 유지한다. mysql_close( ) 가 호출되어야 끊어진다. mysql_field_name mysql_query( ) 검색된 결과 값의 특정 필드의 이름을 반환한다. mysql_field_type 검색된 결과 값의 특정 필드의 타입을 반환한다.
01. MySQL API 다루기 기타 MySQL API 기능 PHP 함수 mysql_field_table 검색된 결과 값의 특정 필드가 속해 있는 테이블 이름을 반환한다. mysql_free_result 검색된 결과 값의 메모리 공간을 반환한다. mysql_data_seek 검색된 결과에서 특정 행 번호를 이용하여 결과 데이터에 접근한다. 성공 시 true, 실패 시 false를 반환한다. mysql_field_seek 검색된 결과에서 특정 필드 오프셋 값을 이용하여 결과 데이터에 접근한다. mysql_fetch_field 검색된 결과에서 필드의 정보를 포함하여 객체를 반환한다. 질의 결과에서 필드에 대한 정보를 얻는데 사용된다. mysql_fetch_lengths 검색된 결과의 행에 대한 데이터의 길이를 배열로 반환한다. mysql_list_dbs MySQL서버에 존재하는 데이터베이스 리스트의 포인트를 반환한다. mysql_list_fields 테이블 내에 필드 리스트를 반환한다. mysql_list_tables 데이터베이스 내에 테이블 리스트를 반환한다.
01. MySQL API 다루기 MySQL 코드 구조
02. 미니 게시판 만들기 게시판에 필요한 테이블 만들기 phpMyAdmin을 실행한다. 사용자 : root 암호 : php123 mydb를 선택한다(mydb 데이터베이스가 없으면 새로 만든다). 데이터베이스 mydb에 새로운 테이블을 만든다. 이름란에‘board’, Number of fields란에‘3’을 입력하고, <실행> 버튼을 누른다.
02. 미니 게시판 만들기 board 테이블에 uid, title, content 필드를 만들어 다음과 같이 속성값을 지정한다. 모든 입력이 완료되면 <저장> 버튼을 눌러 저장한다. 필드 종류 길이 값 보기 추가 인덱스 AUTO_ INCREMENT uid TINYINT 5 Unsigned 자동증가 UNIQUE 체크 title VARCHAR 60 ‐ content TEXT
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> <td valign=top>내용</td> <td> <textarea cols=69 rows=10 name=content> 내용 입력</textarea> 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장 데이터베이스를 이용해 게시판 만들기