나만의 쓰기 편한 db클래스 구현(2.17 수정)

웹 & 안드로이드/PHP|2014. 2. 14. 17:05

 

- 2.17 mysql함수로 쿼리 결과 나오도록 수정

 

- db클래스

: 객체를 여러개 만들 필요가 없기 때문에 싱글톤으로 구현.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
<?php 
class DB_mysql{
    /* singleton pattern. */
    private static $instance = null;
    
    private function __construct(){
    }
    public static function &getInstance(){
        if(self::$instance == null){
            self::$instance = new self();
        }
        return self::$instance;
    }
    
    /* Class start. */
    public $conn = null; #db connection info.
    
    //db connect.
    public function connect($host$id$pw$db_name){
        if(function_exists('mysqli_connect')){
            //mysqli function used.
            $this->conn = mysqli_connect($host$id$pw$db_name
                or die('error! db connect failed.<br />').mysqli_connect_error();
        }else{
            //mysql function used.
            $this->conn = mysql_connect($host$id$pw
                or die('error! db connect failed.<br />').mysql_error($this->conn);
            mysql_select_db($db_name$this->conn);
        }
    }
    
    //select query. $arr[row num][table field].
    public function query_of_select(&$sql){
 
        $arr = array();
        $result = $this->query($sql);
        
        if($result == ''return null;
        
        if(function_exists('mysqli_fetch_fields') and function_exists('mysqli_fetch_array')){
            $fieldsinfo = mysqli_fetch_fields($result);
            $row = null;
 
            $i = -1;
            do{
                foreach ($fieldsinfo as $field){
                    $arr[($i == -1)? 0: $i][$field->name] = ($i == -1)? 'null'$row[$field->name];
                }
                $i++;
            }while($row = mysqli_fetch_array($result));
            
            mysqli_free_result($result);
        
        }else{
            $fieldsinfo = array();
            $row = null;
 
            for($i = 0; $field = mysql_fetch_field($result); $i++){
                $fieldsinfo[$i] = $field;
            }
 
            $i = -1;
            do{
                foreach ($fieldsinfo as $field){
                    $arr[($i == -1)? 0: $i][$field->name] = ($i == -1)? 'null'$row[$field->name];
                }
                $i++;
            }while($row = mysql_fetch_array($result));
 
             mysql_free_result($result);#result 바로 자원 반납.
            
        }
        
        return $arr;
    }
    
    //insert, update, delete 나 create, alter, drop 등 결과가 없는 쿼리 전용.
    public function query_of_CUD(&$sql){
        return $this->query($sql);
    }
    
    //db에 쿼리 날림.
    private function query(&$sql){
        if(function_exists('mysqli_connect')){
            $result = mysqli_query($this->conn, $sql) and $sql = null; #db입력 후, sql변수 null로 초기화.
        }else{
            $result = mysql_query($sql$this->conn) and $sql = null;
        }
        return $result;
    }
    
    //db 접속 닫음.
    public function close(){
        function_exists('mysqli_close')
            ? mysqli_close($this->conn) 
            : mysql_close($this->conn);
    }
    
    //에러 출력.
    public function error(){
        echo function_exists('mysqli_error')
            ? mysqli_error($this->conn)
            : mysql_error($this->conn);
    }
 
    //테이블 형태로 출력.
    public static function print_result_totable($result){
        echo "<style>th{background-color:#aaaaaa;}td{border:black 1px solid;font-size:1em;}</style>";
        echo "<table>";
        echo "<tr><th></th>";
            foreach ($result[0] as $fieldname => $v){
                echo "<th>".$fieldname."</th>";
            }
            echo "</tr>";
        foreach ($result as $rownum => $row){
            echo "<tr><td>".($rownum+1)."</td>";
            foreach ($row as $value){
                echo "<td><center><xmp>".$value."</xmp></center></td>";
            }
            echo "</tr>";
        }
        echo "</table>";
    }
}
?>

 

-사용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$db = DB_mysql::getInstance();
$db->connect('host''db_id''db_pw''db_name');
 
$sql = "select * from sboard";
 
$result = $db->query_of_select($sql);
echo "<table>";
foreach ($result as $rownum => $row){
    echo "<tr><td>".$rownum."행</td>";
    foreach ($row as $field => $value){
        echo "<td>".$field." : ".$value."</td>";
    }
    echo "</tr>";
}
echo "</table>";
 
$db->close();
?>

 

 

댓글()

[PHP] empty 함수

웹 & 안드로이드/PHP|2014. 2. 14. 11:17

empty함수를 통해 공백을 반환하는 경우

 

공백, 0(숫자든 문자든), null정도..

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
$t = '';//공백
echo empty($t)."<br />";//1 반환
 
$t = 0;//숫자 0
echo empty($t)."<br />";//1 반환
 
$t = null;//null
echo empty($t)."<br />";//1 반환
 
$t = '0';//문자 0
echo empty($t)."<br />";//1 반환
 
$t = "0";//문자 0
echo empty($t)."<br />";//1 반환
 
$t = 'null';//문자 null
echo empty($t)."<br />";//'' 반환
 
$t = "null";//문자 null
echo empty($t)."<br />";//'' 반환
 
$t = ' ';//문자 ' '
echo empty($t)."<br />";//'' 반환
 
$t = 1;//숫자 1
echo empty($t)."<br />";//'' 반환
 
$t = 's';//문자열
echo empty($t)."<br />";//'' 반환
?>

 

댓글()

[PHP] 문자열 치환 str_replace

웹 & 안드로이드/PHP|2014. 2. 13. 17:31

기본적인 사용법

 

str_replace(찾을 문자열, 바꿀 문자열, 내용)

 

 

1
2
3
4
<?php
$string = "123456789abcdefghijklmnop";
echo str_replace("1234""일이삼사"$string);
?>

 

* 결과 

일이삼사56789abcdefghijklmnop

 

 

**배열 형식으로 찾아 치환하는것이 가능하다.

 

찾을 문자열의 배열 array(1번, 2번, 3번, ...);

바꿀 문자열의 배열 array(1번, 2번, 3번, ...);

 

찾을 배열의 1번 문자열은 바꿀 배열의 1번 문자열로 치환된다.

2번은 2번으로...

 

1
2
3
4
5
6
<?php
$string = "123456789abcdefghijklmnop";\
$no_string = array("1234""789""bcd");
$replace_string = array("일이삼사""칠팔구""비씨디");
echo str_replace($no_string$replace_string$string);
?>

* 결과

일이삼사56칠팔구a비씨디efghijklmnop

댓글()

[PHP] php문서 내에 php버전을 확인하기.

웹 & 안드로이드/PHP|2014. 2. 13. 14:02
1
2
3
4
<?php
echo (version_compare(phpversion(), '5.2.4''>=')) ? '호환 가능' : '호환 불가';
echo ' : '.phpversion();
?>

출처 - http://www.xpressengine.com/tip/20798445

'웹 & 안드로이드 > PHP' 카테고리의 다른 글

[PHP] empty 함수  (0) 2014.02.14
[PHP] 문자열 치환 str_replace  (1) 2014.02.13
[PHP] GET, POST로 넘어온 파라메터 변수화.  (0) 2014.02.13
[PHP] and, or 문법.  (0) 2014.02.11
[PHP] Singleton 패턴.  (0) 2014.02.11

댓글()

[PHP] GET, POST로 넘어온 파라메터 변수화.

웹 & 안드로이드/PHP|2014. 2. 13. 09:57
1
2
3
4
5
6
7
<?php
foreach ($_GET as $key => $value){
    ${$key} = $value;
    
    echo $key." : ".${$key}."<br />";
}
?>

입력 주소

 -  http://localhost/test/test.php?test=1&test2=2&test3=1939j3jrj3

 

결과

test : 1
test2 : 2
test3 : 1939j3jrj3

 

$test, $test2, $test3 이런식으로 사용 가능.

'웹 & 안드로이드 > PHP' 카테고리의 다른 글

[PHP] 문자열 치환 str_replace  (1) 2014.02.13
[PHP] php문서 내에 php버전을 확인하기.  (0) 2014.02.13
[PHP] and, or 문법.  (0) 2014.02.11
[PHP] Singleton 패턴.  (0) 2014.02.11
[PHP] 클래스의 직렬화, 역직렬화  (0) 2014.02.11

댓글()

[PHP] and, or 문법.

웹 & 안드로이드/PHP|2014. 2. 11. 18:39

and   (식1 and 식2)

- 식1을 실행 후, 식 2를 실행.

 

 

1
2
3
4
<?php
//db에 쿼리를 날리고, 쿼리가 입력된 변수를 null로 초기화.
mysqli_query($this->conn, $sql) and $sql = null;
?>

 

 

or   (식1 or 식2)

- 식1을 실행하고 결과가 공백이거나 0, false, 완전히 결과가 나오지 않을 경우(중간에 에러가 발생할 경우), 식2를 실행.

 

 

1
2
3
4
<?php
//mysql에 접속. 접속에 실패하면 'error! db connect failed.'문구를 뿌리고 끝냄.
mysqli_connect('host''db_id''db_pw''db_name') or die('error! db connect failed.');
?>

댓글()

[PHP] Singleton 패턴.

웹 & 안드로이드/PHP|2014. 2. 11. 10:29

Singleton : 객체를 생성할 때 단 하나만 생성하고, 객체를 호출 할 때 하나의 객체만을 사용하는 패턴.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
class Myclass{
    /* singleton 패턴. */
    private static $instance = null;
    
    private function __construct(){}
    public static function &getInstance(){
        if(self::$instance == null){
            self::$instance = new self();
        }
        return self::$instance;
    }
}
?>

 

생성자를 private로 외부에서 생성자 호출을 막은 것이 포인트.

 

자기 자신을 담을 변수를 static으로 선언 후, getInstance() 메소드를 통해 최초 호출시 객체 생성, 그 이후 호출시 이미 생성된 객체를 리턴 하도록 함.

댓글()

[PHP] 클래스의 직렬화, 역직렬화

웹 & 안드로이드/PHP|2014. 2. 11. 09:43

해당하는 요청에 사용하는 객체를 세션에 저장하고 싶을 경우, 직렬화를 사용하면 된다.

 

serialize() : 객체를 스트링 타입의 정보로 리턴.

unserialize() : serialize()함수에 의해 직렬화된 스트링 타입의 정보를 다시 객체화.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$seri_cls = serialize(new Test()); #Test클래스를 새로 생성하여 직렬화.
 
echo $seri_cls;
 
$unseri_cls = unserialize($seri_cls); #직렬화된 클래스를 역직렬화.
 
echo $unseri_cls->num;
echo $unseri_cls->str;
 
class Test{
    public $num = 10;
    public $str = 'class';
}
 
?>

결과값

 

O:4:"Test":2:{s:3:"num";i:10;s:3:"str";s:5:"class";}10class

 

- O:4:"Test":2:{s:3:"num";i:10;s:3:"str";s:5:"class";}

 : 객체를 직렬화한 스트링 타입의 정보.

 

 

댓글()

[PHP] .htaccess 파일 간단하게 작성하기.

웹 & 안드로이드/PHP|2014. 2. 11. 09:13

http://www.htaccesseditor.com/kr#a_basic

 

 

 

여러가지 옵션이 있으며 옵션 선택후 밑에 나타나는 소스를 해당 .htaccess 파일에 붙여넣기 하면 된다.

 

댓글()