Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 11
CRAP
0.00% covered (danger)
0.00%
0 / 46
Dbal
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 11
272.00
0.00% covered (danger)
0.00%
0 / 46
 __construct
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 2
 getPdo
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 2
 query
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 4
 queryOne
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 8
 queryAsStmt
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 4
 execute
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 4
 prepare
0.00% covered (danger)
0.00%
0 / 1
30.00
0.00% covered (danger)
0.00%
0 / 14
 begin
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 2
 rollback
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 2
 commit
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 2
 close
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 2
<?php
namespace Puyo\Db;
/**
 * PDO をさらに抽象化したもの
 * @uses ext-pdo
 */
class Dbal
{
    /** @var \PDO */
    protected $pdo;
    public function __construct(\PDO $pdo) {
        $this->pdo = $pdo;
    }
    public function getPdo() {
        return $this->pdo;
    }
    /**
     * @param string $sql
     * @param string[]|int[] $values
     * @return array 複数行
     */
    public function query($sql, $values=[]) {
        $stmt = $this->prepare($sql, $values);
        $stmt->execute();
        return $stmt->fetchAll(\PDO::FETCH_ASSOC);
    }
    /**
     * @param string $sql
     * @param string[]|int[] $values
     * @return array|null 単一行
     */
    public function queryOne($sql, $values=[]) {
        $stmt = $this->prepare($sql, $values);
        $stmt->execute();
        $firstRow = $stmt->fetch(\PDO::FETCH_ASSOC);
        if($firstRow === false) {
            return null;
        }
        return $firstRow;
    }
    /**
     * @param string $sql
     * @param string[]|int[] $values
     * @return \PDOStatement
     */
    public function queryAsStmt($sql, $values=[]) {
        $stmt = $this->prepare($sql, $values);
        $stmt->execute();
        return $stmt;
    }
    /**
     * @param string $sql
     * @param string[]|int[] $values
     * @return int 更新件数
     */
    public function execute($sql, $values=[]) {
        $stmt = $this->prepare($sql, $values);
        $stmt->execute();
        return $stmt->rowCount();
    }
    /**
     * @param string $sql
     * @param string[]|int[] $values
     * @return \PDOStatement
     */
    protected function prepare($sql, $values=[]) {
        $stmt = $this->pdo->prepare($sql);
        foreach($values as $name=>$val) {
            if(is_int($val)) {
                $stmt->bindValue($name, $val, \PDO::PARAM_INT);
            } elseif(is_bool($val)) {
                $stmt->bindValue($name, $val, \PDO::PARAM_BOOL);
            } elseif(is_null($val)) {
                $stmt->bindValue($name, $val, \PDO::PARAM_NULL);
            } else {
                $stmt->bindValue($name, $val, \PDO::PARAM_STR);
            }
        }
        return $stmt;
    }
    public function begin() {
        return $this->pdo->beginTransaction();
    }
    public function rollback() {
        return $this->pdo->rollBack();
    }
    public function commit() {
        return $this->pdo->commit();
    }
    public function close() {
        $this->pdo = null;
    }
}