본문으로 바로가기

[PHP] PHP MySQL PDO Class 파일 Ver. 2

category 프로그램/PHP 2016/09/24 10:11
[PHP] PHP MySQL PDO Class 파일 Ver. 2

기존에 동일한 게시물이 있습니다.
물론 크게 변하지는 않았지만 요구하는 조건이 서로 다르기에 글을 하나더 늘리는 방향으로 잡았습니다.
다소 중복된 글이 있더라도 양해해주시기 바랍니다.
이전 게시물을 보기 위해서는 이곳(PHP MySQL PDO Class 파일)을 클릭해주십시오.

이렇게 변경한 이유는 게시판에 사용을 하기 위해서 하다보니 매일 limit 를 사용하고 전체 게시물을 구하는 작업을 좀 줄여 보기 위해서 입니다.
실제적으로는 MySQL에 쿼리를 2번 조회하지만 실행 파일에서는 1번만 하면은 모든것이 됩니다.
limit , offset을 조합해서 사용할 수 있도록 수정을 한 버전입니다.

<?php
class DbMysqlLocal {

    private $host = 'localhost';
    private $user = 'user ';
    private $pass = 'pass ';
    private $dbname = 'dbname ';
    private $port = '3306';

    
    private $dbh;
    private $error;
    
    private $stmt;
    private $stmt1;
    
    private $foundrow;
    
    public function __construct()
    {

        // Set DSN
        $dsn = 'mysql:host='.$this->host.';port='.$this->port.';dbname='.$this->dbname;
        // Set options
        // ATTR_EMULATE_PREPARES : limit offset 에 숫자 넣으면은 에러 날 경우에 이 옵션 활성화
        $options = array(
            PDO::ATTR_PERSISTENT        => true,
            PDO::ATTR_ERRMODE           => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_EMULATE_PREPARES  => false
        );
        // Create a new PDO instanace
        try{
            $this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
            $this->dbh->exec("SET CHARACTER SET utf8");
        }
        // Catch any errors
        catch(PDOException $e){
            $this->error = $e->getMessage();
        }
    }
    
    /**
     * @brief
     *
     **/
    public function query($query)
    {
        //echo 'InQuery : '.$query.chr(10);
        $this->stmt = $this->dbh->prepare($query);
    }
    
    public function bind($param, $value, $type = null)
    {
        if (is_null($type)) {
            switch (true) {
                case is_int($value):
                    $type = PDO::PARAM_INT;
                    break;
                case is_bool($value):
                    $type = PDO::PARAM_BOOL;
                    break;
                case is_null($value):
                    $type = PDO::PARAM_NULL;
                    break;
                default:
                    $type = PDO::PARAM_STR;
            }
        }
        
        $this->stmt->bindValue($param, $value, $type);
    }
    
    /**
     * @brief
     *
     **/
    public function execute()
    {
        return $this->stmt->execute();
    }
    
    /**
     * @brief
     *
     **/
    public function resultset()
    {
        $this->execute();
        $return = $this->stmt->fetchAll(PDO::FETCH_ASSOC);
        
        $this->stmt1 = $this->dbh->prepare("SELECT FOUND_ROWS()");
        $this->stmt1->execute();
        $row = $this->stmt1->fetch();
        $this->foundrow = $row[0];
        
        return $return;
    }
    
    /**
     * @brief
     *
     **/
    public function single()
    {
        $this->execute();
        $return = $this->stmt->fetch(PDO::FETCH_ASSOC);

        $this->stmt1 = $this->dbh->prepare("SELECT FOUND_ROWS()");
        $this->stmt1->execute();
        $row = $this->stmt1->fetch();
        $this->foundrow = $row[0];
        
        return $return;
    }
    
    /**
     * @brief
     *
     **/
    public function rowCount()
    {
        return $this->stmt->rowCount();
    }
    /**
     * limit 사용하더라도 전체 row 수를 가져올 수 있는 select 에서 사용함
     **/
    public function rowFound()
    {
        return $this->foundrow;
    }    
    
    /**
     * @brief
     *
     **/
    public function lastInsertId()
    {
        return $this->dbh->lastInsertId();
    }
    
    /**
     * @brief
     *
     **/
    public function debugDumpParams()
    {
        return $this->stmt->debugDumpParams();
    }
    
    /**
     * @brief
     *
     **/
    public function showMessage()
    {
        return $this->error;
    }
    
    /**
     * @brief
     *
     **/
    public function beginTransaction()
    {
        return $this->dbh->beginTransaction();
    }
    
    /**
     * @brief
     *
     **/
    public function endTransaction()
    {
        return $this->dbh->commit();
    }
    
    /**
     * @brief
     *
     **/
    public function cancelTransaction()
    {
        return $this->dbh->rollBack();
    }
    
    
}




크리에이티브 커먼즈 라이센스
Creative Commons License

트랙백

http://trudy.kr/trackback/107

댓글을 달아 주세요

Trudy
Trudy 님의 블로그
MENU
VISITOR 오늘382 / 전체525731