본문 바로가기

프로그래밍 공부/PHP

PHP - PHP에서 데이터베이스 조작 下

 

검색 결과 표시

검색 키워드를 송신할 폼 search.html과 검색 결과를 목록으로 표시할 list.php를 작성한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE html>
<html>
    <head>
        <title>PHP 테스트</title>
        <meta http-equiv="Content-type" content="text/html; charset=UTF-8">
    </head>
    <body bgcolor="#FFFFFF" text="#000000">
        <font size="4">PHP 테스트</font>
        <form name="form1" method="POST" action="list.php">
            이름:<br>
            <input type="text" name="search_key"><br>
            <input type="submit" value="검색하기">
        </form>
    </body>
</html>
cs

검색 폼과 송신 폼은 기능적으로 다를 것이 없다. search.html에 검색 키워드를 입력하고 POST 메서드를 사용해 list.php로 송신한다. list.php는  데이터를 입력할 때와 마찬가지로 슈퍼 글로벌 변수 $_POST에서 데이터를 받는다. form 태그의 method 속성에는 post를 action 속성에는 list.php를 작성한다.

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
<html>
<head>
    <title>PHP 테스트</title>
</head>
<body>
    <?php
        $db_user = "root";          // 사용자명
        $db_pass = "password";      // 패스워드
        $db_host = "localhost";     // 호스트명
        $db_name = "phpdb";         // 데이터베이스명
        $db_type = "mysql";         // 데이터베이스 종류
        $dsn = "$db_type:host=$db_host; dbname=$db_name charset=UTF8";
 
        try{
            $pdo = new PDO($dsn$db_user$db_pass);
            $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
            
            print "접속하였습니다.";
        }catch(PDOExecption $Exception){
            die('오류:'.$Exception->getMessage());
        }
 
        // POST 데이터를 받는다.
        $search_key = '%'.$_POST['search_key'].'%';
        try{
            $sql = "SELECT * FROM member WHERE last_name like :last_name OR first_name LIKE :first_name";
            $stmh = $pdo->prepare($sql);
            $stmh->bindValue(':last_name'$_POST['last_name'], PDO::PARAM_STR);
            $stmh->bindValue(':first_name'$_POST['first_name'], PDO::PARAM_STR);
            $stmh->execute();
 
            $count = $stmh->rowCount();
            print "검색 결과는".$count."건입니다.<br>";
        }catch(PDOExecption $Exception){
            print "오류:".$Exception->getMesssage();
        }
        
        // 계속 이어짐
cs

접속에는 PDO를 이용한다. DSN을 변수로 구성하고 변수는 "로 묶여있어 문자열이 된다. try 블록 안에서 데이터베이스에 접속하고 try-catch문을 이용할 수 있게 오류 모드를 설정한다. 프리페어드 스테이트먼트를 이용할 수 있도록 에뮬레이터 기능을 FALSE로 지정하고 있다.

SQL에서 %는 '0 문자 이상인 임의의 문자열'을 의미한다. '%검색 키워드%'로 하면 중간 일치(검색 키워드가 중간에 포함된 데이터)검색을 실행할 수 있다. %를 사용하는 검색에서는 조건문에 =이 아니라 like를 사용한다. WHERE 조건1 OR 조건2는 조건1 또는 조건2 둘중 하나와 일치하면의 의미이다. WHERE 구문에 last_name 또는 first_name에 $search_key가 포함되어 있다면 검색할 수 있다는 의미이다.

%의 사용방법
검색키워드% 전방 일치
%검색키워드% 중간 일치
%검색키워드 후방 일치

HTML 태그의 무효화는 변수 안에 포함될 수 있는 HTML 태그를 무효화해 크로스사이트 스크립팅을 막을 수 있다.

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
if($count < 1){
            print "검색 결과가 없습니다.<br>";
        }else{
            ?>
            <table width="450" border="1" cellspacing="0" cellpedding="8">
                <tbody>
                    <tr>
                        <th>번호</th>
                        <th></th>
                        <th>이름</th>
                        <th>연령</th>
                    </tr>
                    <?php
                        while($row = $stmh->fetch(PDO::FETCH_ASSOC)){
                            ?>
                            <tr>
                                <td align="center"><?=htmlspecialchars($row['id'])?></td>
                                <td><?=htmlspecialchars($row['last_name'])?></td>
                                <td><?=htmlspecialchars($row['first_name'])?></td>
                                <td><?=htmlspecialchars($row['age'])?></td>
                            </tr>
                            <?php
                        }
                    ?>
                </tbody>
            </table>
            <?php
        }
    ?>
</body>
</html>
cs

이어지는 코드로 htmlspecialchar 함수를 이용하면 된다.

수정

수정 폼을 작성한다. 수정에는 데이터를 수정할 PHP 파일과 데이터베이스를 수정할 PHP 파일이 필요하다. 두 파일 모두 데이터베이스에 접속한다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!-- MYDB.php -->
<?php
    function db_connect(){
        $db_user = "root";          // 사용자명
        $db_pass = "password";      // 패스워드
        $db_host = "localhost";     // 호스트명
        $db_name = "phpdb";         // 데이터베이스명
        $db_type = "mysql";         // 데이터베이스 종류
        $dsn = "$db_type:host=$db_host; dbname=$db_name charset=UTF8";
 
        try{
            $pdo = new PDO($dsn$db_user$db_pass);
            $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
        }catch(PDOExecption $Exception){
            die('오류:'.$Exception->getMessage());
        }
        return $pdo;
    }
?>
cs

수정데이터를 가져오려면 세션 변수를 사용한다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
    session_start();
?>
<html>
<head>
    <title>PHP 테스트</title>
</head>
<body>
    <?php
        require_once("MYDB.php");
        $pdo = db_connect();
        // 여기를 변경하면 수정 대상이 바뀐다.
        $id = 1;
        $_SESSION['id'= $id;
        try{
            $sql = "SELECT * FROM member WHERE id = :id";
            $stmh = $pdo->prepare($sql);
            $stmh->bindValue(':id'$id, PDO::PARAM_INT);
            $stmh->execute();
            $count = $stmh->rowCount();
        }catch(PDOException $Exception){
            print "오류:".$Exception0<getMessage();
        }
        // 다음에서 계속
cs

id를 조건으로 $sql = "SELECT * FROM member WHERE id = :id"; 를 사용하는 이유는 id는 유일하게 중복되지 않는 유일한 유니크 값으로 확실히 1건만 나타내기 때문이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        // 이전에서 이어짐
        if($count<1){
            print "수정 데이터가 없습니다.<br>";
        }else{
            $row = $stmh->fetch(PDO::FETCH_ASSOC);
            ?>
            <form name="form1" method="POST" action="update.php">
                번호:<?=htmlspecialchars($row['id'])?><br>
                성:<input type="text" name="last_name" value="<?=htmlspecialchars($row['last_name'])?>"><br>
                이름:<input type="text" name="first_name" value="<?=htmlspecialchars($row['first_name'])?>"><br>
                연령:<input type="text" name="age" value="<?=htmlspecialchars($row['age'])?>"><br>
                <input type="submit" value="수정">
            </form>
            <?php
        }
    ?>
</body>
</html>
cs

검색된 데이터는 스테이트먼트 핸들러의 fetch 메서드로 얻을 수 있다. 인수의 PDO::FETCH_ASSOC는 칼럼명을 이용한 연관 배열로 데이터를 받을 것을 지시한 것이다. 아무것도 지정하지 않으면 연관 배열 형식과 인덱스가 숫자로 된 배열을 중복하여 데이터를 돌려주기 때문이다. 가져온 연관 배열은 $row에 할당이 된다.

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
<?php
    session_start();
?>
<html>
<head>
    <title>PHP 테스트</title>
</head>
<body>
    <?php
        require_once("MYDB.php");
        $pdo = db_connect();
        // 세션 변수를 받는다.
        $id = $_SESSION['id'];
        try{
            $pdo->beginTransaction();
            $sql = "UPDATE member SET last_name = :last_name, first_name = :first_name, age = :age WHERE id = :id";
            $stmh = $pdo->prepare($sql);
            $stmh->bindValue(':last_name'$_POST['last_name'], PDO::PARAM_STR);
            $stmh->bindValue(':first_name'$_POST['first_name'], PDO::PARAM_STR);
            $stmh->bindValue(':age'$_POST['age'], PDO::PARAM_INT);
            $stmh->bindValue(':id'$id, PDO::PARAM_INT);
            $stmh->execute();
            $pdo->commit();
            print "데이터를 ".$stmh->rowCount()."건 수정하였습니다.<br>";
        }catch(PDOException $Exception){
            $pdo->rollBack();
            print "오류:".$Exception0<getMessage();
        }
        // 세션 변수를 모두 삭제한다.
        $_SESSION = array();
        // 마지막으로 세션을 파기한다.
        session_destroy();
    ?>
</body>
</html>
cs

삭제

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
<html>
    <head>
        <title>데이터 삭제 테스트</title>
        <meta http-equiv="Content-type" content="text/html; charset=UTF-8">
    </head>
    <body bgcolor="#FFFFFF" text="#000000">
        삭제할 번호를 클릭하세요.
        <table width="150" border="1" cellspacing="0" cellpedding="8">
            <tbody>
                <tr>
                    <th>번호</th>
                </tr>
                <tr>
                    <td align="center"><a href="list.php?action=delete&id=1">[1]</a></td>
                </tr>
                <tr>
                    <td align="center"><a href="list.php?action=delete&id=2">[2]</a></td>
                </tr>
                <tr>
                    <td align="center"><a href="list.php?action=delete&id=3">[3]</a></td>
                </tr>
                <tr>
                    <td align="center"><a href="list.php?action=delete&id=4">[4]</a></td>
                </tr>
                <tr>
                    <td align="center"><a href="list.php?action=delete&id=5">[5]</a></td>
                </tr>
                <tr>
                    <td align="center"><a href="list.php?action=delete&id=6">[6]</a></td>
                </tr>
            </tbody>
        </table>
    </body>
</html>
cs

데이터를 삭제하기 위해서는 먼저 링크를 클릭하여 어떤 데이터를 삭제할지 결정한다. delete.html 파일을 만들고 이 페이지에 링크가 클릭되면 링크에 추가된 매개변수가 송신이 된다. 글로벌 변수 $_GET으로 받을 수 있다. 

삭제 화면은 삭제 링크를 일렬번호(id)순으로 기술한다. 데이터의 수만큼 앞서 작성한 링크처럼 작성한다. id에는 MySQL이 자동으로 번호를 삽입하도록 auto_increment가 지정되어 있어서 데이터를 입력할 때마다 번호의 최대치+1이 계산되어 번호가 입력된다. 만약 마지막 데이터가 삭제되어도 삭제된 번호는 이용할 수 없고 다음번호로 건너 뛰게 된다.

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
<html>
<head>
    <title>PHP 테스트</title>
</head>
<body>
    <?php
        require_once("MYDB.php");
        $pdo = db_connect();
        if(isset($_GET['action']) && $_GET['action'== 'delete' && $_GET['id'> 0){
            try{
                $pdo->beginTransaction();
                $id = $_GET['id'];
                $sql = "DELETE FROM member WHERE id = :id";
                $stmh = $pdo->prepare($sql);
                $stmh->bindValue(':id'$id, PDO::PARAM_INT);
                $stmh->execute();
                $pdo->commit();
                print "데이터를 ".$stmh->rowCount()."건 삭제하였습니다.<br>";
            }catch(PDOExecption $Exception){
                $pdo->rollBack();
                print "오류:".$Exception->getMessage();
            }
        }
 
        try{
            $sql = "SELECT * FROM member ";
            $stmh = $pdo->query($sql);
            $count = $stmh->rowCount();
            print "검색 결과는".$count."건 입니다.<br>";
        }catch(PDOExecption $Exception){
            print "오류:".$Exception->getMessage();
        }
 
        if($count < 1){
            print "검색 결과가 없습니다.<br>";
        }else{
            ?>
            <table width="450" border="1" cellspacing="0" cellpedding="8">
                <tbody>
                    <tr>
                        <th>번호</th>
                        <th></th>
                        <th>이름</th>
                        <th>연령</th>
                    </tr>
                    <?php
                        while($row = $stmh->fetch(PDO::FETCH_ASSOC)){
                            ?>
                            <tr>
                                <td align="center"><?=htmlspecialchars($row['id'])?></td>
                                <td><?=htmlspecialchars($row['last_name'])?></td>
                                <td><?=htmlspecialchars($row['first_name'])?></td>
                                <td><?=htmlspecialchars($row['age'])?></td>
                            </tr>
                            <?php
                        }
                    ?>
                </tbody>
            </table>
            <?php
        }
    ?>
</body>
</html>
cs

연계

지금까지 입력, 검색, 수정, 삭제를 PHP에서 SQL을 실행하는 과정을 알아보았다. 이 4 가지 기능을 연계해서 동작하게 만들 수 있다.

파일명과 각 기능은 아래의 표와 같다.

파일명 기능
list.php 검색, 입력, 수정, 삭제
form.html 등록화면
updateform.php 수정용 폼
MYDB.php 데이터베이스 접속 함수

list.php 내부에서 처리를 나누는 조건은 아래와 같다.

조작명 $_GET['action'] $_POST['action']
입력 - insert
수정 - update
삭제 delete -
검색 - search_key에 값이 존재

먼저 검색 폼을 추가한다. 이전에 작성한 list.php 파일을 수정해야 한다.

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
126
127
128
129
130
<!-- list.php -->
<?php
    session_start();
?>
<html>
<head>
    <title>PHP 테스트</title>
</head>
<body>
    <hr size="1" noshade>
    회원 목록
    <hr size="1" noshade>
    [<a href="form.html">등록</a>]
    <br>
    <form name="form" method="POST" action="list.php">
        이름:<input type="text" name="search_key"><input type="submit" value="검색">
    </form>
    <?php
        // 삭제 처리
        require_once("MYDB.php");
        $pdo = db_connect();
        if(isset($_GET['action']) && $_GET['action'== 'delete' && $_GET['id'> 0){
            try{
                $pdo->beginTransaction();
                $id = $_GET['id'];
                $sql = "DELETE FROM member WHERE id = :id";
                $stmh = $pdo->prepare($sql);
                $stmh->bindValue(':id'$id, PDO::PARAM_INT);
                $stmh->execute();
                $pdo->commit();
                print "데이터를 ".$stmh->rowCount()."건 삭제하였습니다.<br>";
            }catch(PDOExecption $Exception){
                $pdo->rollBack();
                print "오류:".$Exception->getMessage();
            }
        }
 
        // 입력 처리
        if(isset($_POST['action']) && $_POST['action'== 'insert'){
            try{
                $pdo->beginTransaction();
                $sql = "INSERT INTO member(last_name, first_name, age) VALUES(:last_name, :first_name, :age)";
                $stmh = $pdo->prepare($sql);
                $stmh->bindValue(':last_name'$_POST['last_name'], PDO::PARAM_STR);
                $stmh->bindValue(':first_name'$_POST['first_name'], PDO::PARAM_STR);
                $stmh->bindValue(':age'$_POST['age'], PDO::PARAM_INT);
                $stmh->execute();
                $pdo->commit();
                print "데이터를".$stmh->rowCount()."건 입력하였습니다.<br>";
            }catch(PDOExecption $Exception){
                $pdo->rollBack();
                print "오류:".$Exception->getMessage();
            }
        }
 
        // 수정 처리
        if(isset($_POST['action']) && $_POST['action'== 'update'){
            // 세션 변수에 따라 id를 받는다.
            $id = $_SESSION['id'];
            try{
                $pdo->beginTransaction();
                $sql = "UPDATE member SET last_name = :last_name, first_name = :first_name, age = :age WHERE id = :id";
                $stmh = $pdo->prepare($sql);
                $stmh->bindValue(':last_name'$_POST['last_name'], PDO::PARAM_STR);
                $stmh->bindValue(':first_name'$_POST['first_name'], PDO::PARAM_STR);
                $stmh->bindValue(':age'$_POST['age'], PDO::PARAM_INT);
                $stmh->execute();
                $pdo->commit();
                print "데이터를".$stmh->rowCount()."건 수정하였습니다.<br>";
            }catch(PDOExecption $Exception){
                $pdo->rollBack();
                print "오류:".$Exception->getMessage();
            }
            // 사용한 세션 변수를 삭제한다.
            unset($_SESSION['id']);
        }
 
        // 검색 및 현재의 모든 데이터를 표시한다.
        try{
            if(isset($_POST['search_key']) && $_POST['search_key'!= ""){
                $search_key = '%'.$_POST['search_key'].'%';
                $sql = "SELECT * FROM member WHERE last_name like :last_name OR first_name like :first_name";
                $stmh = $pdo->prepare($sql);
                $stmh->bindValue(':last_name'$search_key, PDO::PARAM_STR);
                $stmh->bindValue(':first_name'$search_key, PDO::PARAM_STR);
                $stmh->execute();
            }else{
                $sql = "SELECT * FROM member";
                $stmh = $pdo->query($sql);
            }
            $count = $stmh->rowCount();
            print "검색 결과는 ".$count."건 입니다.<br>";
        }catch(PDOExecption $Exception){
            print "오류:".$Exception->getMessage();
        }
        if($count < 1){
            print "검색 결과가 없습니다.<br>";
        }else{
            ?>
            <table width="450" border="1" cellspacing="0" cellpedding="8">
                <tbody>
                    <tr>
                        <th>번호</th>
                        <th></th>
                        <th>이름</th>
                        <th>연령</th>
                        <th>&nbsp;</th>
                        <th>&nbsp;</th>
                    </tr>
                    <?php
                        while($row = $stmh->fetch(PDO::FETCH_ASSOC)){
                            ?>
                            <tr>
                                <td align="center"><?=htmlspecialchars($row['id'])?></td>
                                <td><?=htmlspecialchars($row['last_name'])?></td>
                                <td><?=htmlspecialchars($row['first_name'])?></td>
                                <td><?=htmlspecialchars($row['age'])?></td>
                                <td align="center"><a href=updateform.php?id=<?=htmlspecialchars($row['id'])?>>수정</a></td>
                                <td align="center"><a href=list.php?action=delete&id=<?=htmlspecialchars($row['id'])?>>삭제</a></td>
                            </tr>
                            <?php
                        }
                    ?>
                </tbody>
            </table>
            <?php
        }
        ?>
    </body>
</html>
cs

form.html 파일은 list.php로 돌아올 수 있는 링크를 추가하고 form태그의 action 속성은 list.php로 지정한다. 그리고 맨 끝에 input태그를 만들고 type 속성을 hidden으로 name 속성은 action으로 value 속성은 insert로 지정하면 list.php가 insert를 판단해 입력 처리를 실행한다.

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
<!-- form.html -->
<!DOCTYPE html>
<html>
    <head>
        <title>PHP 테스트</title>
        <meta http-equiv="Content-type" content="text/html; charset=UTF-8">
    </head>
    <body bgcolor="#FFFFFF" text="#000000">
        <font size="4">PHP 테스트</font>
        <hr size="1" noshade>
        등록화면
        <hr size="1" noshade>
        [<a href="list.php">돌아가기</a>]
        <br>
        <form name="form1" method="POST" action="view.php">
            성:<br>
            <input type="text" name="last_name"><br>
            이름:<br>
            <input type="text" name="first_name"><br>
            연령:<br>
            <input type="text" name="age"><br>
            <input type="submit" value="송신">
            <input type="hidden" name="action" value="insert">
        </form>
    </body>
</html>
cs

마지막으로 updateform.php를 수정한다. list.php로 돌아올 수 있는 링크를 추가하고 if 조건문을 사용해 조건을 설정한다. $_GET['id']에 값이 있는 확인후 그 값이 0보다 크면 처리를 실행하고 id가 없다면 메세지를 표시하고 정지하게 만든다.

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
<!-- updateform.php -->
<?php
    session_start();
?>
<html>
<head>
    <title>PHP 테스트</title>
</head>
<body>
    <hr size="1" noshade>
    수정화면
    <hr size="1" noshade>
    [<a href="list.php">돌아가기</a>]
    <br>
    <?php
        require_once("MYDB.php");
        $pdo = db_connect();
        if(isset($_GET['id']) && $_GET['id'> 0){
            $id = $_GET['id'];
            $_SESSION['id'= $id;
        }else{
            exit('잘못된 파라미터입니다.');
        }
 
        try{
            $sql = "SELECT * FROM member WHERE id = :id";
            $stmh = $pdo->prepare($sql);
            $stmh->bindValue(':id'$id, PDO::PARAM_INT);
            $stmh->execute();
            $count = $stmh->rowCount();
        }catch(PDOException $Exception){
            print "오류:".$Exception0<getMessage();
        }
 
        if($count<1){
            print "수정 데이터가 없습니다.<br>";
        }else{
            $row = $stmh->fetch(PDO::FETCH_ASSOC);
            ?>
            <form name="form1" method="POST" action="list.php">
                번호:<?=htmlspecialchars($row['id'])?><br>
                성:<input type="text" name="last_name" value="<?=htmlspecialchars($row['last_name'])?>"><br>
                이름:<input type="text" name="first_name" value="<?=htmlspecialchars($row['first_name'])?>"><br>
                연령:<input type="text" name="age" value="<?=htmlspecialchars($row['age'])?>"><br>
                <input type="submit" value="수정">
                <input type="hidden" name="action" value="update">
            </form>
            <?php
        }
    ?>
</body>
</html>
cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!-- MYDB.php -->
<?php
    function db_connect(){
        $db_user = "root";          // 사용자명
        $db_pass = "password";      // 패스워드
        $db_host = "localhost";     // 호스트명
        $db_name = "phpdb";         // 데이터베이스명
        $db_type = "mysql";         // 데이터베이스 종류
        $dsn = "$db_type:host=$db_host; dbname=$db_name charset=UTF8";
 
        try{
            $pdo = new PDO($dsn$db_user$db_pass);
            $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
        }catch(PDOExecption $Exception){
            die('오류:'.$Exception->getMessage());
        }
        return $pdo;
    }
?>
cs

list.php, MYDB.php, form.html과 updateform.php가 준비되면 Apache의 DocumentRoot에 설치후에 웹 브라우저 주소 http://localhost/list.php에 접속하면 된다.