본문 바로가기
Study/php

PHP] PDO익스텐션 이용하기( 간단한 예제)

by Answer Choi 2015. 10. 7.
반응형

예제 다운로드


이번 예제도 지난번과 같은 프로그램에서 PDO로만 바꾼 것입니다.


mysql 익스텐션 이용한 예제


mysqli 익스텐션 이용한 예제


PDO를 이용한 mysql 도 비슷하지만 약간의 차이점이 있습니다.


일단 지난번에 했던 예제에 한정해서 다른점만 알아보는거라 자세한건 


PHP The right wayPHP 레퍼런스 메뉴얼 을 참고하세요.


먼저 코드를 보시면


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
<?php
        try{
            $conn=new pdo('mysql:host=localhost','root','0157');    
 
        }catch(PDOException $e){
            echo 'could not connect:'.$e->getMessage();
        }
        $selDb=$conn->exec('use answerofgod');
        if(!$selDb){
            $createDB=$conn->exec('create database answerofgod');
            $useDB=$conn->exec('use answerofgod');
            $createTable=$conn->exec('create table blog(
                                        id int not null auto_increment, 
                                        url text not null, 
                                        description text null, 
                                        constraint pk primary key(id) 
                                        )');
        }
        $queryData=$conn->query('select * from blog');
        if(!$queryData){
            echo('query error :'.mysql_error());
        }
        while($row=$queryData->fetch(PDO::FETCH_ASSOC)){
            echo '<tr><form action="./management_pdo.php?mode=modify" method="POST">
            <td><input name="id" value="'.$row['id'].'" readonly size=1/></td>
            <td><input name="url" value="'.$row['url'].'"/></td>
            <td><input name="desc" value="'.$row['description'].'"/></td>
            <td>
            <input type="submit" value="MODIFY"/>
            </form>
            <form action="./management_pdo.php?mode=delete" method="POST">
            <input type="hidden" name="id" value="'.$row['id'].'"/>
            <input type="submit" value="DELETE"/>
            </form>
            </td>';            
        }
?> 
cs


그 전까진 절차지향을 제공했지만, PDO는 객체지향만 제공합니다.


Line 2에 pdo로 사용하려는게 mysql임을 알려줘야 합니다.


그리고 처음 접속은 pdo 객체를 만드는 것부터 시작합니다.


객체를 만들때 dbname을 입력해줘도 되고, Line8처럼 따로 사용명령을 해줘도 됩니다.


select문처럼 결과값이 필요없는경우 exec를 사용하면 되고, select문의 경우 query를 사용해야 합니다.


mysqli vs pdo


query


mixed mysqli_query ( mysqli $link , string $query [, int $resultmode = MYSQLI_STORE_RESULT ] )


-> public PDOStatement PDO::query ( string $statement )


db select


bool mysqli_select_db ( mysqli $link , string $dbname )


-> public int PDO::exec ( string $statement )


그리고 변수를 넣어야 하는 update, delete, select문등에는 보안을 위해 prepare를 쓰는게 좋습니다.


public PDOStatement PDO::prepare ( string $statement [, array $driver_options = array() ] )


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
<?php
switch($_GET['mode']){
    case 'insert':
        if($_POST['url']!=null){        
            $insert=$conn->prepare('insert into blog (url,description) value (:url,:description)' );
            $url=filter_input(INPUT_POST,'url');
            $insert->bindParam(':url',$url,PDO::PARAM_STR);
            $description=filter_input(INPUT_POST,'description');
            $insert->bindParam(':description',$description,PDO::PARAM_STR);
            $insert->execute();            
        }
        header('Location: blog_manage_pdo.php');        
        break;
    case 'delete':        
        $delete=$conn->prepare('delete from blog where id=:id');
        $id=filter_input(INPUT_POST,'id');
        $delete->bindParam(':id',$id,PDO::PARAM_INT);
        $delete->execute();        
        header('Location: blog_manage_pdo.php');
        break;    
    case 'modify':                
        $update=$conn->prepare('update blog set url=:url,description=:description where id=:id');        
        $url=filter_input(INPUT_POST,'url');
        $update->bindParam(':url',$url,PDO::PARAM_STR);
        $description=filter_input(INPUT_POST,'description');
        $update->bindParam(':description',$description,PDO::PARAM_STR);
        $id=filter_input(INPUT_POST,'id');
        $update->bindParam(':id',$id,PDO::PARAM_INT);
        $update->execute();                
        header('Location: blog_manage_pdo.php');
        break;
    default:
        header('Location: blog_manage_pdo.php');
        break;
    }
?>    
cs


Line 5 : prepare문에서는 변수부분에 ':변수명'으로 처리합니다.


Line 6 : 넘어온 변수를 필터를 통해 저장합니다.


mixed filter_input ( int $type , string $variable_name [, int $filter = FILTER_DEFAULT [, mixed $options ]] )


Line 7 : 위험요소를 제거해서 변수를 prepare에서 변수처리된 부분에 넣어줍니다.


public bool PDOStatement::bindParam ( mixed $parameter , mixed &$variable [, int $data_type = PDO::PARAM_STR [, int$length [, mixed $driver_options ]]] )


Line 10 : query문을 실행합니다.


public bool PDOStatement::execute ([ array $input_parameters ] )


실행해 보면 동작은 같습니다.





반응형

인기글