aboutsummaryrefslogtreecommitdiff
path: root/lib/Minz/Pdo.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Minz/Pdo.php')
-rw-r--r--lib/Minz/Pdo.php52
1 files changed, 52 insertions, 0 deletions
diff --git a/lib/Minz/Pdo.php b/lib/Minz/Pdo.php
new file mode 100644
index 000000000..d334c0533
--- /dev/null
+++ b/lib/Minz/Pdo.php
@@ -0,0 +1,52 @@
+<?php
+
+/**
+ * MINZ - Copyright 2011 Marien Fressinaud
+ * Sous licence AGPL3 <http://www.gnu.org/licenses/>
+ */
+
+abstract class Minz_Pdo extends PDO {
+ public function __construct($dsn, $username = null, $passwd = null, $options = null) {
+ parent::__construct($dsn, $username, $passwd, $options);
+ $this->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
+ }
+
+ abstract public function dbType();
+
+ private $prefix = '';
+ public function prefix() { return $this->prefix; }
+ public function setPrefix($prefix) { $this->prefix = $prefix; }
+
+ private function autoPrefix($sql) {
+ return str_replace('`_', '`' . $this->prefix, $sql);
+ }
+
+ protected function preSql($statement) {
+ if (preg_match('/^(?:UPDATE|INSERT|DELETE)/i', $statement)) {
+ invalidateHttpCache();
+ }
+ return $this->autoPrefix($statement);
+ }
+
+ public function lastInsertId($name = null) {
+ if ($name != null) {
+ $name = $this->preSql($name);
+ }
+ return parent::lastInsertId($name);
+ }
+
+ public function prepare($statement, $driver_options = array()) {
+ $statement = $this->preSql($statement);
+ return parent::prepare($statement, $driver_options);
+ }
+
+ public function exec($statement) {
+ $statement = $this->preSql($statement);
+ return parent::exec($statement);
+ }
+
+ public function query($query, $fetch_mode = null, ...$fetch_mode_args) {
+ $query = $this->preSql($query);
+ return $fetch_mode ? parent::query($query, $fetch_mode, ...$fetch_mode_args) : parent::query($query);
+ }
+}