Created
July 10, 2012 11:55
-
-
Save dave1010/3082884 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
PDO Adapter class from Alejandro Gervasio's post: http://phpmaster.com/integrating-the-data-mappers/ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
interface DatabaseAdapterInterface | |
{ | |
public function connect(); | |
public function disconnect(); | |
public function prepare($sql, array $options = array()); | |
public function execute(array $parameters = array()); | |
public function fetch($fetchStyle = null, | |
$cursorOrientation = null, $cursorOffset = null); | |
public function fetchAll($fetchStyle = null, $column = 0); | |
public function select($table, array $bind, | |
$boolOperator = "AND"); | |
public function insert($table, array $bind); | |
public function update($table, array $bind, $where = ""); | |
public function delete($table, $where = ""); | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
class PdoAdapter implements DatabaseAdapterInterface | |
{ | |
protected $config = array(); | |
protected $connection; | |
protected $statement; | |
protected $fetchMode = \PDO::FETCH_ASSOC; | |
public function __construct($dsn, $username = null, | |
$password = null, array $driverOptions = array()) { | |
$this->config = compact("dsn", "username", "password", | |
"driverOptions"); | |
} | |
public function getStatement() { | |
if ($this->statement === null) { | |
throw new \PDOException( | |
"There is no PDOStatement object for use."); | |
} | |
return $this->statement; | |
} | |
public function connect() { | |
// if there is a PDO object already, return early | |
if ($this->connection) { | |
return; | |
} | |
try { | |
$this->connection = new \PDO( | |
$this->config["dsn"], | |
$this->config["username"], | |
$this->config["password"], | |
$this->config["driverOptions"]); | |
$this->connection->setAttribute(\PDO::ATTR_ERRMODE, | |
\PDO::ERRMODE_EXCEPTION); | |
$this->connection->setAttribute( | |
\PDO::ATTR_EMULATE_PREPARES, false); | |
} | |
catch (\PDOException $e) { | |
throw new \RunTimeException($e->getMessage()); | |
} | |
} | |
public function disconnect() { | |
$this->connection = null; | |
} | |
public function prepare($sql, array $options = array() { | |
$this->connect(); | |
try { | |
$this->statement = $this->connection->prepare($sql, | |
$options); | |
return $this; | |
} | |
catch (\PDOException $e) { | |
throw new \RunTimeException($e->getMessage()); | |
} | |
} | |
public function execute(array $parameters = array()) { | |
try { | |
$this->getStatement()->execute($parameters); | |
return $this; | |
} | |
catch (\PDOException $e) { | |
throw new \RunTimeException($e->getMessage()); | |
} | |
} | |
public function countAffectedRows() { | |
try { | |
return $this->getStatement()->rowCount(); | |
} | |
catch (\PDOException $e) { | |
throw new \RunTimeException($e->getMessage()); | |
} | |
} | |
public function getLastInsertId($name = null) { | |
$this->connect(); | |
return $this->connection->lastInsertId($name); | |
} | |
public function fetch($fetchStyle = null, | |
$cursorOrientation = null, $cursorOffset = null) { | |
if ($fetchStyle === null) { | |
$fetchStyle = $this->fetchMode; | |
} | |
try { | |
return $this->getStatement()->fetch($fetchStyle, | |
$cursorOrientation, $cursorOffset); | |
} | |
catch (\PDOException $e) { | |
throw new \RunTimeException($e->getMessage()); | |
} | |
} | |
public function fetchAll($fetchStyle = null, $column = 0) { | |
if ($fetchStyle === null) { | |
$fetchStyle = $this->fetchMode; | |
} | |
try { | |
return $fetchStyle === \PDO::FETCH_COLUMN | |
? $this->getStatement()->fetchAll($fetchStyle, $column) | |
: $this->getStatement()->fetchAll($fetchStyle); | |
} | |
catch (\PDOException $e) { | |
throw new \RunTimeException($e->getMessage()); | |
} | |
} | |
public function select($table, array $bind = array(), | |
$boolOperator = "AND") { | |
if ($bind) { | |
$where = array(); | |
foreach ($bind as $col => $value) { | |
unset($bind[$col]); | |
$bind[":" . $col] = $value; | |
$where[] = $col . " = :" . $col; | |
} | |
} | |
$sql = "SELECT * FROM " . $table | |
. (($bind) ? " WHERE " | |
. implode(" " . $boolOperator . " ", $where) : " "); | |
$this->prepare($sql) | |
->execute($bind); | |
return $this; | |
} | |
public function insert($table, array $bind) { | |
$cols = implode(", ", array_keys($bind)); | |
$values = implode(", :", array_keys($bind)); | |
foreach ($bind as $col => $value) { | |
unset($bind[$col]); | |
$bind[":" . $col] = $value; | |
} | |
$sql = "INSERT INTO " . $table | |
. " (" . $cols . ") VALUES (:" . $values . ")"; | |
return (int) $this->prepare($sql) | |
->execute($bind) | |
->getLastInsertId(); | |
} | |
public function update($table, array $bind, $where = "") { | |
$set = array(); | |
foreach ($bind as $col => $value) { | |
unset($bind[$col]); | |
$bind[":" . $col] = $value; | |
$set[] = $col . " = :" . $col; | |
} | |
$sql = "UPDATE " . $table . " SET " . implode(", ", $set) | |
. (($where) ? " WHERE " . $where : " "); | |
return $this->prepare($sql) | |
->execute($bind) | |
->countAffectedRows(); | |
} | |
public function delete($table, $where = "") { | |
$sql = "DELETE FROM " . $table . (($where) ? " WHERE " . $where : " "); | |
return $this->prepare($sql) | |
->execute() | |
->countAffectedRows(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment