본문 바로가기

Study and Tip/Study

[DB] PHP와 MySQL 연동

 


  이번에 할 것은 간단한 웹프로그래밍 예제이다. PHP가 동작하는 구조는 위 그림과 같다. PHP파일은 동적으로 웹서버를 통하여 해석된다. PHP파일 자체는 의미가 없고 해석되어야만 의미가 생긴다는 것이다. HTML문서는 그 자체로도 내용을 가지고 있지만, PHP는 내부 함수가 실행이 되고 나서 출력 결과가 의미가 있다. 이렇게 PHP를 통해 만들어진 HTML문서는 유저에게 전달되어 유저의 클라이언트 프로그램인 웹브라우저에 출력되게 된다.




 



 비단 웹 프로그램뿐만 아니라 대부분의 프로그램이 이런 구조를 가지게 된다. SQL이 프로그래밍 언어는 아니기 때문에 다른 프로그래밍 언어에 Implementation되어 작동한다. Implementation은 C나 JAVA, Python등 어떤 언어로도 될 수 있지만 이번에는 PHP로 하였다. 이번 예제는 저번에 만들었던 Reserve테이블과 Sailor테이블을 조인하여 예약결과를 보여주는 테이블을 유저에게 출력시켜주는 것이다.






1. include queryFunction.php 부분


   마치 C언어에서 stdio.h를 include하는 것과 비슷하다고 본다. 개발자 입장에서 DB에 접속하고 SQL질의를 던져주는 등의 일을 반복하는 것이 바람직한 일이 아니다. 이러한 부분은 다른 페이지를 또 생성해야 한다면 반복될 것임이 분명하다. 프로그램을 짜는 이유는 반복되는 부분은 최소화시키고 간단하게 하기 위함에 있다. queryFunction.php를 살펴보자.


	
function viewQueryResult($dbname,$strQuery){

	//Connect DB
	$connect = @mysql_connect("localhost","root","apmsetup") or die("DB접속에러");

	//Select DB
	@mysql_select_db($dbname,$connect) or die("DB선택에러");

	//Print Query Result
	$result = @mysql_query($strQuery) or die("SQL error");

	// 테이블 시작
	echo "<table border>";

	// 머릿글 출력
	echo "<tr>";
	while($field=@mysql_fetch_field ($result)){
		echo "<th>";
		//print_r($field);
		echo $field->name;
		echo "</th>";
	}
	echo "</tr>";

	// 데이터 출력
	while($data=@mysql_fetch_row($result)){
		echo "<tr>";
		for($i=0;$i<(count($data));$i++){
			echo "<td>";
			echo $data[$i];
			echo "</td>";
		}
		echo "</tr>";
	}

	// 테이블 끝
	echo "</table>";
} 
	



  DB에 연결하고 대신 쿼리를 보내주고 결과까지 <table> 태그를 이용하여 출력시키도록 작성되었다. 즉 나중에 추가적인 View가 필요하다고 하더라도, SQL질의만 새로 만들어서 viewQueryResult함수를 사용하면 또 다른 테이블을 얻을 수 있을 것이다.

 



2. viewQueryResult 함수


  이 함수가 처리하는 과정은 실질적으로 SQL쿼리를 넘기는 부분이다. viewQueryResult함수는 query_view.php로부터 SQL쿼리를 받아 SQL질의를 PHP가 제공하는 함수를 통해 MySQL로 전달하는 역할을 한다. 또한 MySQL이 보내주는 결과값을 PHP 엔진이 받아서 제공해주는데, 이 값을 받아서 <table> 태그로 된 표를 작성해준다. 이 <table>이 PHP echo함수를 통해서 HTML상에 표현되게 된다.




쿼리해석


	
SELECT S.sid,sname,bid,day,age,sex FROM reserves R, sailors S WHERE R.sid = S.sid; 
	


  이번 예제에서는 위 두 테이블을 sid를 기준으로 Natural Join한다. 그 다음 Column은 sid, sname, bid, day, age, sex만 나타나게 한다. reserves 테이블에는 선원에 대한 정보가 없기 때문에 sailors 테이블과 조인해야 하는 것이다. 그렇기 때문에 앞에 첨부한 결과가 나오게 되었다.