php 기본 스터디 > 그누보드5 팁자료실

그누보드5 팁자료실

php 기본 스터디 정보

php 기본 스터디

본문

http://webstyledesign.tistory.com/entry/PHP-DB-연동하기


PHP언어로 만들수 있는 프로그램이나
만들어져있는 프로그램의 95%는 DB와 연동하는 프로그램입니다.


중요한부분입니다. 

MySQL 데이터베이스 관련 PHP함수

mysql_connect();

--MySQL 서버에 접속하는 함수

mysql_select_db();

--MySQL 데이터베이스를 선택하는 함수

mysql_query();

--MySQL 서버에 query를 보낸후 실행시키는 함수

mysql_fetch_array();

--쿼리 실행후 결과를 필드이름색인 또는 숫자색인으로 된 배열로 반환하는 함수 

mysql_free_result();

--결과값을 제거(해체)하는 함수

mysql_close();

--MySQL 접속을 닫는 함수

 

mysql_connect() 함수 예제

<? 

$link = mysql_connect("localhost","byc","freely21c");

//# MySQL 서버에 접속 #//

// 접속에 성공하면 $link변수에는 DB연결에 대한 링크식별자 값이 들어가며 접속에 실패하면
// 아무값도 들어가지 않는다.

 

if ($link)
echo "연결성공";
else
echo "연결실패";

 

//# MySQL 접속해체 #//

mysql_close($link);

 

?>

※ localhost을 써놓는부분은 해당 MySQL서버가 있는 위치를 말한다.
해당 서버에 MySQL서버가 있다면 localhost을 쓰지만 다른곳에 있느다면 해당 ip나 도메인을 씁니다.

 

mysql_select_db() 함수 예제

<?

 

$link = mysql_connect("localhost","byc","freely21c");

//# MySQL 서버에 접속 #//

// 접속에 성공하면 $link변수에는 DB연결에 대한 링크식별자 값이 들어가며 접속에 실패하면

// 아무값도 들어가지 않는다.

 

mysql_select_db("byc",$link);

//링크 식별자값으로 이용하여 사용가능한 데이터베이스를 선택한다.

 

//# MySQL 접속해체 #//

mysql_close($link);

?>

 

※ or die("출력할내용"); 을 mysql관련함수 모두의 뒤에 붙이면
mysql관련함수가 에러나면 에러 메세지를 출력하지 않고 "출력할내용"이 화면에 출력된다.

ex > mysql_select_db("byc",$link) or die("에러입니다.^^");

 

mysql_query() 함수 예제

select query

<?

$link = mysql_connect("localhost","byc","freely21c");

//# MySQL 서버에 접속 #//

// 접속에 성공하면 $link변수에는 DB연결에 대한 링크식별자 값이 들어가며 접속에 실패하면

// 아무값도 들어가지 않는다.

 

mysql_select_db("byc",$link) or die("데이터베이스를 잘못선택하였습니다.");

//링크 식별자값으로 이용하여 사용가능한 데이터베이스를 선택한다.

 

$qry_chk = mysql_query(" select * from pet3 ",$link);
//# 링크식별자로 연결된 DB에 query를 보낸후 해당 MySQL에서 실행시킨다. #//
//# 링크식별자를 입력하지 않으면 가장 최근에 열어진 링크식별자를 자동으로 사용하게 된다. #//
//# SELECT문,INSERT문,UPDATE문,DELETE문 모두 사용하다.
//# 리턴되는 값은 성공이면 참(TRUE), 거짓이면 거짓(FALSE)을 리턴한다. #//

 

if($qry_chk)
echo "실행 성공";
else
echo "실행 실패";

 

//# MySQL 접속해체 #//

mysql_close($link);

 

?>

 

insert query

<?

$link = mysql_connect("localhost","byc","freely21c");

//# MySQL 서버에 접속 #//

// 접속에 성공하면 $link변수에는 DB연결에 대한 링크식별자 값이 들어가며 접속에 실패하면

// 아무값도 들어가지 않는다.

 

mysql_select_db("byc",$link) or die("데이터베이스를 잘못선택하였습니다.");

//링크 식별자값으로 이용하여 사용가능한 데이터베이스를 선택한다.

 

$qry_chk = mysql_query(" insert into pet3 values('jun','lee','sik','0','1988-02-01',12,13) ",$link);

//# 링크식별자로 연결된 DB에 query를 보낸후 해당 MySQL에서 실행시킨다. #//
//# 링크식별자를 입력하지 않으면 가장 최근에 열어진 링크식별자를 자동으로 사용하게 된다. #//
//# SELECT문,INSERT문,UPDATE문,DELETE문 모두 사용하다.
//# 리턴되는 값은 성공이면 참(TRUE), 거짓이면 거짓(FALSE)을 리턴한다. #//

 

if($qry_chk)
echo "실행 성공";
else
echo "실행 실패";

 

//# MySQL 접속해체 #//

mysql_close($link);

?>


※ 파란색은 주석입니다. 코딩하지 않아도 되삼

 

mysql_query() 함수 예제

update query

<?

$link = mysql_connect("localhost","byc","freely21c");
//# MySQL 서버에 접속 #//
// 접속에 성공하면 $link변수에는 DB연결에 대한 링크식별자 값이 들어가며 접속에 실패하면
// 아무값도 들어가지 않는다.

mysql_select_db("byc",$link) or die("데이터베이스를 잘못선택하였습니다.");
//링크 식별자값으로 이용하여 사용가능한 데이터베이스를 선택한다.

 

$qry_chk = mysql_query(" update pet3 set owner = 'haha' where name = 'lee' ",$link);
//# 링크식별자로 연결된 DB에 query를 보낸후 해당 MySQL에서 실행시킨다. #//
//# 링크식별자를 입력하지 않으면 가장 최근에 열어진 링크식별자를 자동으로 사용하게 된다. #//
//# SELECT문,INSERT문,UPDATE문,DELETE문 모두 사용하다.
//# 리턴되는 값은 성공이면 참(TRUE), 거짓이면 거짓(FALSE)을 리턴한다. #//

 

if($qry_chk)
echo "실행 성공";
else
echo "실행 실패";

 

mysql_close($link);
//# MySQL 접속해체 #//

 

?>

delete query

<?

$link = mysql_connect("localhost","byc","freely21c");
//# MySQL 서버에 접속 #//
// 접속에 성공하면 $link변수에는 DB연결에 대한 링크식별자 값이 들어가며 접속에 실패하면
// 아무값도 들어가지 않는다.

 

mysql_select_db("byc",$link) or die("데이터베이스를 잘못선택하였습니다.");
//링크 식별자값으로 이용하여 사용가능한 데이터베이스를 선택한다.

 

$qry_chk = mysql_query(" delete from pet3 where name = 'jun' ",$link);
//# 링크식별자로 연결된 DB에 query를 보낸후 해당 MySQL에서 실행시킨다. #//
//# 링크식별자를 입력하지 않으면 가장 최근에 열어진 링크식별자를 자동으로 사용하게 된다. #//
//# SELECT문,INSERT문,UPDATE문,DELETE문 모두 사용하다.
//# 리턴되는 값은 성공이면 참(TRUE), 거짓이면 거짓(FALSE)을 리턴한다. #//

 

if($qry_chk)
echo "실행 성공";
else
echo "실행 실패";

 

mysql_close($link);
//# MySQL 접속해체 #//

 

?>

 

mysql_fetch_array() 함수 예제

 

쿼리 실행후 결과를 필드명 색인 또는 숫자 색인으로 된 배열형태로 반환하는 함수입니다.

INSERT, UPDATE, DELETE 는 결과 데이타가 없습니다. 
왜냐하면 실행후 결과가 나오지 않기 때문입니다.

하지만 SELECT 는 쿼리실행후 결과가 출력되며
이렇게 출력된 데이타를 PHP파일에서 처리해서 브라우저에게 출력하게 됩니다.

 

결과 데이타셋에서 첫번째 레코드의 단일 컬럼정보를 출력하기

 

<?

 

$link = mysql_connect("localhost","byc","freely21c");

mysql_select_db("byc",$link) or die("데이터베이스를 잘못선택하였습니다.");

$qry_result = mysql_query(" select * from pet3 ",$link);

 

$qry_row = mysql_fetch_array($qry_result);

//# $qry_result 변수값에서 select 쿼리의 결과 레코드등중 첫번째 레코드를 한줄가져와서

//# 배열형태로 $qry_row변수에 넣습니다.

 

echo $qry_row["name"];

//# 대입한 배열변수에서 출력할 단일 컬럼명을 이용해 데이타를 출력한다.

 

//# MySQL 접속해체 #//

mysql_close($link);

 

?>

 

결과 데이타셋에서 첫번째 레코드의 모든 컬럼정보를 출력하기

 

<?

 

$link = mysql_connect("localhost","byc","freely21c");

mysql_select_db("byc",$link) or die("데이터베이스를 잘못선택하였습니다.");

$qry_result = mysql_query(" select * from pet3 ",$link);

 

$qry_row = mysql_fetch_array($qry_result);

//# $qry_result 변수값에서 select 쿼리의 결과 레코드등중 첫번째 레코드를 한줄가져와서

//# 배열형태로 $qry_row변수에 넣습니다.

 

echo $qry_row["name"] . " " . $qry_row["owner"] . " " . $qry_row["jong"] . " " . $qry_row["sex"] . " " . $qry_row["birth"];

//# 대입한 배열변수에서 출력할 여러 컬럼명을 이용해 데이타를 출력한다.

 

//# MySQL 접속해체 #//

mysql_close($link);

 

?>

 

결과데이타셋에서 모든 레코드의 모든 컬럼정보를 출력하기

 

<?

 

$link = mysql_connect("localhost","byc","freely21c");

mysql_select_db("byc",$link) or die("데이터베이스를 잘못선택하였습니다.");

$qry_result = mysql_query(" select * from pet3 ",$link);

 

//# $qry_result 변수값에서 select 쿼리의 결과 레코드를 첫번째부터 하나씩 가져온다.

 

 첫번째 레코드를 한줄가져와서

//# 배열형태로 $qry_row변수에 넣습니다.

 

//# while 반복문으로 조회결과를 한 로우씩 뽑아온다.

//# 로우결과가 없을때까지 반복해서 실행합니다.

while($qry_row = mysql_fetch_array($qry_result))
{

echo $qry_row["name"] . " " . $qry_row["owner"] . "<br>";

echo $qry_row["jong"] . " " . $qry_row["sex"] . " " . $qry_row["birth"] . "<br>";

}

 

//# MySQL 접속해체 #//

mysql_close($link);

 

?>

 

mysql_free_result() 함수 예제

결과값(result)을 제거(해체)하는 함수

 

<?

 

$link = mysql_connect("localhost","byc","freely21c");

mysql_select_db("byc",$link) or die("데이터베이스를 잘못선택하였습니다.");

$qry_result = mysql_query(" select * from pet3 ",$link);

 

//# $qry_result 변수값에서 select 쿼리의 결과 레코드등중 첫번째 레코드를 한줄가져와서
//# 배열형태로 $qry_row변수에 넣습니다.
$qry_row = mysql_fetch_array($qry_result);

 

//# mysql_query함수의 리턴값인 result(데이타셋)에 내용을 모두 제거한다.

//# 사실 안해줘야 되지만 이런게 있다는것을 알아두자.

mysql_free_result($qry_result);

 

//# MySQL 접속해체 #//
mysql_close($link);

 

?>

 

mysql_close() 함수 예제

 

MySQL 접속을 닫는 함수

 

<?

 

$link = mysql_connect("localhost","byc","freely21c");
//# MySQL 서버에 접속 #//
// 접속에 성공하면 $link변수에는 DB연결에 대한 링크식별자 값이 들어가며 접속에 실패하면
// 아무값도 들어가지 않는다.

 

mysql_close($link);
//# MySQL 접속해체 #//
//# 사실 mysql_close()함수도 마지막 부분에서 자동으로 종료되기 

//# 때문에 사용할 필요가 없다.

 

?>

1편 DB의 사용
본 강의는 MySQL기준입니다.

웹프로그램에서 빠질 수 없는 DB의 사용입니다.
mysql_connect, mysql_fetch_array등의 함수를 아직도 이용하시나요? 
럼 본 강의를 본것은 행운입니다^^

저는 일단 Pear를 사용하여 DB를 사용합니다.
하지만 Pear도 복잡한 함수와 사용법을 배워야 합니다.
그래서 저는 Pear를 한번더 감싸서 편리하게 사용하고 있습니다.(Adapter패턴)
일단 제가 사용하고 있는 DB 클래스입니다.

1.<?php 
2.require_once 'DB.php'; //Pear 
3.require_once 'common.php'; 
4.
5.class mydb 
6.{ 
7.   var $db; 
8.   var $debug=true; 
9.
10.   function mydb($user='유져', $pass='암호', $name='데이타베이스') 
11.   { 
12.       $dsn = "mysql://$user:$pass@localhost/$name"; 
13.       $this->db = DB::connect($dsn); 
14.
15.       if(DB::isError($this->db)) die("DB Connect Error<br>죄송합니다. 잠시만 기다려주세요."); 
16.   } 
17.
18.   function close() 
19.   { 
20.       if($this->db) 
21.       { 
22.           $this->db->disconnect(); 
23.       } 
24.   } 
25.
26.   //데이타 가져오기 
27.   function select($dbname, $arr='', $where='') 
28.   { 
29.       if($arr) 
30.       { 
31.           $sel=join(", ", $arr); 
32.       } 
33.       else 
34.       { 
35.           $sel=" * "; 
36.       } 
37.       $sql="select $sel from $dbname $where"; 
38.       $data=$this->q($sql); 
39.       if($data && count($data) == 1) 
40.       { 
41.           return $data[0]; 
42.       } 
43.       else 
44.       { 
45.           return $data; 
46.       } 
47.   } 
48.
49.   //일반퀴리 
50.   function q($sql) 
51.   { 
52.       $data=$this->db->query($sql); 
53.       $this->error($data); 
54.
55.       while ($row = $data->fetchRow(DB_FETCHMODE_ASSOC)) 
56.       { 
57.           $var[] = $row; 
58.       } 
59.
60.       return $var; 
61.   } 
62.   //퀴리 한줄만 얻기 
63.   function ql($sql) 
64.   { 
65.       $data=$this->q($sql); 
66.       if(!$data) return false; 
67.       $data2=$data[0]; 
68.       return $data2; 
69.   } 
70.
71.   //저장용 퀴리 
72.   function sq($sql) 
73.   { 
74.       $data=$this->db->query($sql); 
75.       $this->error($data); 
76.       return $data; 
77.   } 
78.
79.   //한개의 값만 얻어오기 
80.   function qo($sql) 
81.   { 
82.       $data=$this->db->getOne($sql); 
83.       $this->error($data); 
84.       return $data; 
85.   } 
86.
87.   //데이타 넣기 
88.   function in($dbname, $arr) 
89.   { 
90.       $num=$this->db->autoExecute($dbname, $arr, DB_AUTOQUERY_INSERT); 
91.       $this->error($num); 
92.       return $num; 
93.   } 
94.
95.   //데이타 업데이트 
96.   function up($dbname, $arr, $where) 
97.   { 
98.       $num=$this->db->autoExecute($dbname, $arr, DB_AUTOQUERY_UPDATE, $where); 
99.       $this->error($num); 
100.       return $num; 
101.   } 
102.
103.   //데이타 수정하기 up=up+1 이 되게 
104.   function up2($dbname, $arr, $where='') 
105.   { 
106.       foreach($arr as $key=>$val) 
107.       { 
108.           if( (!find_str($val, "+") && !find_str($val, "-") && !find_str($val, "*") ) && is_string($val) ) 
109.           { 
110.               $val="'".$val."'"; 
111.           } 
112.           $filed[]="$key = $val"; 
113.       } 
114.       $view=join(",", $filed); 
115.       if($where) $where=" where " . $where; 
116.       $sql="update $dbname set $view $where";    //sql문 생성 
117.       $data=$this->sq($sql); 
118.
119.       return $data; 
120.   } 
121.
122.   //auto_increment 현재값 
123.   function seq($dbname, $field) 
124.   { 
125.
126.       $sql="select max($field) from $dbname "; 
127.       $val=$this->qo($sql)+0; 
128.       return $val; 
129.   } 
130.
131.   //최근 auto_increment 값 
132.   function auto() 
133.   { 
134.       $sql="select LAST_INSERT_ID()"; 
135.       $val=$this->qo($sql); 
136.
137.       return $val; 
138.   } 
139.
140.   //에러 첵킹 
141.   function error($info) 
142.   { 
143.       if (DB::isError($info)) 
144.       { 
145.           if($this->debug) 
146.           { 
147.               die($info->getDebugInfo()); 
148.           } 
149.           else 
150.           { 
151.               die("DB 에러"); 
152.           } 
153.       } 
154.   } 
155.
156.} 
157.
158.?>
 
굳이 소스코드를 이해할려고 하실 필요는 없습니다.
DB의 사용이 이렇게 간결하게 될 수 있다는 것을 알려드릴려는것 뿐입니다.
많이 사용하는 방식의 DB처리를 예제로 보여드리겠습니다.

1.<?php 
2.
3.$db=new mydb();    //DB의 접속 
4.//다른 db에 접속하려면 $db=new mydb("aaaa", "bbbb", "cccc"); 방식으로 접속하면된다 
5.
6.
7.//사용자 정보의 갯수 가져오기 
8.$sql="select count(*) from user";    //퀴리문 
9.$data=$db->qo($sql);    //QueryOne 의 줄임표현입니다. 한개의 정보만 가져옵니다. 
10.echo $data;    //사용자 정보 갯수 출력 
11.
12.
13.// aaaa란 사용자의 정보 출력 
14.$sql="select * from user where id='aaaa' "; 
15.$data=$db->ql($sql);    //QueryLine 의 줄임표현입니다. 한라인의 정보만 가져옵니다. 
16.echo "이름 : $data[name] - 생일 : $data[birth] ";    //$data 에는 각 필드명으로 배열에 들어가 있습니다. 
17.
18.
19.//모든 사용자 정보 가져오기 
20.$sql="select * from user "; 
21.$data=$db->q($sql);    //보통 Query의 줄임표현입니다. 
22.foreach($data as $key => $val)    //루프를 돌립니다. 
23.{ 
24.   echo "이름 : $val[name] - 생일 : $val[birth] ";    //$val 에는 한라인의 정보가 들어있습니다. 
25.} 
26.
27.
28.//사용자의 정보 넣기 
29.$in[name]="이름";    //정보의 배열은 $in[필드명]=값 의 형식이다. 
30.$in[birth]="1213"; 
31.$in[id]="bbbb"; 
32.$db->in("user", $in);    //Insert 의 줄임표현이다. 만든 배열을 넣는다 
33.
34.
35.//사용자 정보 수정 
36.$up[name]="이름2";    //정보의 배열은 $up[필드명]=값 의 형식이다. 
37.$up[birth]="1111"; 
38.$db->up("user", $up, "id='bbbb' ");    //Update의 줄임표현이다. 
39.
40.//+ - 되는 정보수정 
41.$up[age]="age + 1"; 
42.$db->up2("user", $up, "id='bbbb' ");     //Update 에서 + - 가 필요한 형식의 경우를 위해 따로 함수를 만들었다 
43.
44.
45./* 
1.기존의 Insert문으로 보면 많이 간단해졌다는것을 알 수 있다. 
2.$sql = " insert into user set name = '이름',    birth = '1213',    id = 'bbbb' "; 
3.필드명이 많아질수록 처리가 힘들것을 많이 격어봤을 것입니다. 
4.
5.DB의 Insert와 Update를 배열로 넣는것은 보기편한것 외에 더 많은 장점이 있다. 
6.배열로 사용하면서 많은 처리를 줄일 수 있다. 
7.*/ 
47.48.49./* 
1.......... 
2.여러가지 처리들(아이디 중복같은 검사들) 
3....... 
4.$data[name]="이름"; 
5.*/ 
51.if($no)    //회원번호가 있을경우 
52.{ 
53.   $db->up("user", $data, "no=$no"); 
54.} 
55.else    //회원번호가 없을경우 
56.{ 
57.   $db->in("user", $data); 
58.} 
59./* 
1.이렇게 수많은 처리를 앞쪽에 두고 뒤에는 해당 데이타를 업데이트할 것인지 인설트할것인지를 정해서 처리하면 된다. 
2.*/ 
61.62.63.64./* 
1.이 방법을 보시면 더욱 놀랄것입니다. 
2.PHP는 $_POST에 배열로 전송하는 값들을 담고 있습니다. DB처리의 배열을 이것과 연결하면 수많은 단계를 줄일 수 있습니다. 
3.
4.아래와 같이 폼이 있다고 봅니다. 
5.<form target=post> 
6.<input type=text name=id> 
7.<input type=text name=name> 
8.<input type=text name=birth> 
9.<input type=submit value=save> 
10.</form> 
11.*/ 
66.67.$data=$_POST;    //POST로 넘어온값을 data에 저장한다 
68.unset($data[save]);    //POST 데이타중 필요없는 정보는 지운다 
69.$db->in("user", $data);    //배열을 DB에 넣는다. 
70./* 
1.보통 이것보다 더 많은 필드를 처리해야 했을것입니다. 
2.물론 이 방법은 보안에 문제가 생길 수도 있습니다. 
3.하지만 예외처리를 적당히 해주시면 수많은 DB코딩을 줄일 수 있게 됩니다. 
4.*/ 
72.73.74.$db->close();    //DB연결 종료 
75.
76.?> 
 

추천
4

댓글 0개

전체 2,411 |RSS
그누보드5 팁자료실 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT