이 강의는 코딩에 지친 웹프로그래머들에게 바칩니다;;
저는 PHP를 접한지 5년이란 세월이 흘렀습니다.
어떡하면 효율적으로 코딩을 할까? 어떻하면 코딩을 간결하게 할 수 있을까? 하는 많은 고민을 했습니다.
그 동안 저의 노하우를 강의를 합니다.
이건 단지 저의 방식이고 더욱 편한 방법이나 자신과 스타일이 맞지 않으면 이 글을 안읽으셔도 됩니다.
다만 자신이 웹프로그래밍을 하면서 너무 반복적인일을 한다고 생각되면 한번쯤 읽어보시면 분명 도움이 되리라 생각합니다.
일단 글을 다 읽고 소스는 강의의 끝에 첨부합니다.
처음에는 부담없이 읽기만 해주세요^^
1편 DB의 사용
본 강의는 MySQL기준입니다.
웹프로그램에서 빠질 수 없는 DB의 사용입니다.
mysql_connect, mysql_fetch_array등의 함수를 아직도 이용하시나요? 그럼 본 강의를 본것은 행운입니다^^
저는 일단 Pear를 사용하여 DB를 사용합니다. 하지만 Pear도 복잡한 함수와 사용법을 배워야 합니다.
그래서 저는 Pear를 한번더 감싸서 편리하게 사용하고 있습니다.(Adapter패턴)
일단 제가 사용하고 있는 DB 클래스입니다.
- <?php
- require_once 'DB.php'; //Pear
- require_once 'common.php';
-
- class mydb
- {
- var $db;
- var $debug=true;
-
- function mydb($user='유져', $pass='암호', $name='데이타베이스')
- {
- $dsn = "mysql://$user:$pass@localhost/$name";
- $this->db = DB::connect($dsn);
-
- if(DB::isError($this->db)) die("DB Connect Error<br>죄송합니다. 잠시만 기다려주세요.");
- }
-
- function close()
- {
- if($this->db)
- {
- $this->db->disconnect();
- }
- }
-
- //데이타 가져오기
- function select($dbname, $arr='', $where='')
- {
- if($arr)
- {
- $sel=join(", ", $arr);
- }
- else
- {
- $sel=" * ";
- }
- $sql="select $sel from $dbname $where";
- $data=$this->q($sql);
- if($data && count($data) == 1)
- {
- return $data[0];
- }
- else
- {
- return $data;
- }
- }
-
- //일반퀴리
- function q($sql)
- {
- $data=$this->db->query($sql);
- $this->error($data);
-
- while ($row = $data->fetchRow(DB_FETCHMODE_ASSOC))
- {
- $var[] = $row;
- }
-
- return $var;
- }
- //퀴리 한줄만 얻기
- function ql($sql)
- {
- $data=$this->q($sql);
- if(!$data) return false;
- $data2=$data[0];
- return $data2;
- }
-
- //저장용 퀴리
- function sq($sql)
- {
- $data=$this->db->query($sql);
- $this->error($data);
- return $data;
- }
-
- //한개의 값만 얻어오기
- function qo($sql)
- {
- $data=$this->db->getOne($sql);
- $this->error($data);
- return $data;
- }
-
- //데이타 넣기
- function in($dbname, $arr)
- {
- $num=$this->db->autoExecute($dbname, $arr, DB_AUTOQUERY_INSERT);
- $this->error($num);
- return $num;
- }
-
- //데이타 업데이트
- function up($dbname, $arr, $where)
- {
- $num=$this->db->autoExecute($dbname, $arr, DB_AUTOQUERY_UPDATE, $where);
- $this->error($num);
- return $num;
- }
-
- //데이타 수정하기 up=up+1 이 되게
- function up2($dbname, $arr, $where='')
- {
- foreach($arr as $key=>$val)
- {
- if( (!find_str($val, "+") && !find_str($val, "-") && !find_str($val, "*") ) && is_string($val) )
- {
- $val="'".$val."'";
- }
- $filed[]="$key = $val";
- }
- $view=join(",", $filed);
- if($where) $where=" where " . $where;
- $sql="update $dbname set $view $where"; //sql문 생성
- $data=$this->sq($sql);
-
- return $data;
- }
-
- //auto_increment 현재값
- function seq($dbname, $field)
- {
-
- $sql="select max($field) from $dbname ";
- $val=$this->qo($sql)+0;
- return $val;
- }
-
- //최근 auto_increment 값
- function auto()
- {
- $sql="select LAST_INSERT_ID()";
- $val=$this->qo($sql);
-
- return $val;
- }
-
- //에러 첵킹
- function error($info)
- {
- if (DB::isError($info))
- {
- if($this->debug)
- {
- die($info->getDebugInfo());
- }
- else
- {
- die("DB 에러");
- }
- }
- }
-
- }
-
- ?>
| 굳이 소스코드를 이해할려고 하실 필요는 없습니다.
DB의 사용이 이렇게 간결하게 될 수 있다는 것을 알려드릴려는것 뿐입니다.
많이 사용하는 방식의 DB처리를 예제로 보여드리겠습니다.
- <?php
-
- $db=new mydb(); //DB의 접속
- //다른 db에 접속하려면 $db=new mydb("aaaa", "bbbb", "cccc"); 방식으로 접속하면된다
-
-
- //사용자 정보의 갯수 가져오기
- $sql="select count(*) from user"; //퀴리문
- $data=$db->qo($sql); //QueryOne 의 줄임표현입니다. 한개의 정보만 가져옵니다.
- echo $data; //사용자 정보 갯수 출력
-
-
- // aaaa란 사용자의 정보 출력
- $sql="select * from user where id='aaaa' ";
- $data=$db->ql($sql); //QueryLine 의 줄임표현입니다. 한라인의 정보만 가져옵니다.
- echo "이름 : $data[name] - 생일 : $data[birth] "; //$data 에는 각 필드명으로 배열에 들어가 있습니다.
-
-
- //모든 사용자 정보 가져오기
- $sql="select * from user ";
- $data=$db->q($sql); //보통 Query의 줄임표현입니다.
- foreach($data as $key => $val) //루프를 돌립니다.
- {
- echo "이름 : $val[name] - 생일 : $val[birth] "; //$val 에는 한라인의 정보가 들어있습니다.
- }
-
-
- //사용자의 정보 넣기
- $in[name]="이름"; //정보의 배열은 $in[필드명]=값 의 형식이다.
- $in[birth]="1213";
- $in[id]="bbbb";
- $db->in("user", $in); //Insert 의 줄임표현이다. 만든 배열을 넣는다
-
-
- //사용자 정보 수정
- $up[name]="이름2"; //정보의 배열은 $up[필드명]=값 의 형식이다.
- $up[birth]="1111";
- $db->up("user", $up, "id='bbbb' "); //Update의 줄임표현이다.
-
- //+ - 되는 정보수정
- $up[age]="age + 1";
- $db->up2("user", $up, "id='bbbb' "); //Update 에서 + - 가 필요한 형식의 경우를 위해 따로 함수를 만들었다
-
-
- /*
- 기존의 Insert문으로 보면 많이 간단해졌다는것을 알 수 있다.
- $sql = " insert into user set name = '이름', birth = '1213', id = 'bbbb' ";
- 필드명이 많아질수록 처리가 힘들것을 많이 격어봤을 것입니다.
-
- DB의 Insert와 Update를 배열로 넣는것은 보기편한것 외에 더 많은 장점이 있다.
- 배열로 사용하면서 많은 처리를 줄일 수 있다.
- */
-
-
- /*
- .........
- 여러가지 처리들(아이디 중복같은 검사들)
- ......
- $data[name]="이름";
- */
- if($no) //회원번호가 있을경우
- {
- $db->up("user", $data, "no=$no");
- }
- else //회원번호가 없을경우
- {
- $db->in("user", $data);
- }
- /*
- 이렇게 수많은 처리를 앞쪽에 두고 뒤에는 해당 데이타를 업데이트할 것인지 인설트할것인지를 정해서 처리하면 된다.
- */
-
-
-
- /*
- 이 방법을 보시면 더욱 놀랄것입니다.
- PHP는 $_POST에 배열로 전송하는 값들을 담고 있습니다. DB처리의 배열을 이것과 연결하면 수많은 단계를 줄일 수 있습니다.
-
- 아래와 같이 폼이 있다고 봅니다.
- <form target=post>
- <input type=text name=id>
- <input type=text name=name>
- <input type=text name=birth>
- <input type=submit value=save>
- </form>
- */
-
- $data=$_POST; //POST로 넘어온값을 data에 저장한다
- unset($data[save]); //POST 데이타중 필요없는 정보는 지운다
- $db->in("user", $data); //배열을 DB에 넣는다.
- /*
- 보통 이것보다 더 많은 필드를 처리해야 했을것입니다.
- 물론 이 방법은 보안에 문제가 생길 수도 있습니다.
- 하지만 예외처리를 적당히 해주시면 수많은 DB코딩을 줄일 수 있게 됩니다.
- */
-
-
- $db->close(); //DB연결 종료
-
- ?>
|
이것으로 DB의 사용에 대한 강의를 마칩니다. [이 게시물은 PHPSCHOOL님에 의해 2006-02-21 15:10:54 팁앤테크에서 복사 됨] |