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개