X-Git-Url: http://git.shiar.net/minimedit.git/blobdiff_plain/0cc6251412d85492cbd0af0d50176d3c70c25311..9b5016ca5c340cc4f3b6f39d0f1d52a58946235b:/database.inc.php diff --git a/database.inc.php b/database.inc.php index 6e040d4..d6da853 100644 --- a/database.inc.php +++ b/database.inc.php @@ -1,4 +1,73 @@ PDO::ERRMODE_EXCEPTION ]; -$Db = new PDO($dsn, NULL, NULL, $options); +$Db = new DB($dsn); + +class DB +{ + public $dbh; + + function __construct($config, $options = []) + { + $options += [ + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ, + ]; + $this->dbh = new PDO($config, NULL, NULL, $options); + } + + function query($sql, $params = []) + { + $stmt = $this->dbh->prepare($sql); + $stmt->execute($params); + return $stmt; + } + + function _value($val, &$params) + { + if (is_array($val)) { + $sql = array_shift($val); + $params = array_merge($params, $val); + return $sql; + } + elseif (is_bool($val)) { + return $val ? 'TRUE' : 'FALSE'; + } + + $params[] = $val; + return '?'; + } + + function set($table, $row, $filter = NULL) + { + $params = []; + if (is_null($filter)) { + $cols = []; + foreach ($row as $col => $val) { + $cols[] = $this->_value($val, $params); + } + $sql = sprintf('INSERT INTO %s (%s) VALUES (%s)', + '"'.$table.'"', + implode(', ', array_keys($row)), + implode(', ', $cols) + ); + } + else { + $sql = 'UPDATE "'.$table.'"'; + $cols = []; + foreach ($row as $col => $val) { + $cols[] = $col . ' = ' . $this->_value($val, $params); + } + + $sql .= ' SET ' . implode(', ', $cols); + if (is_array($filter)) { + $sql .= ' WHERE ' . array_shift($filter); + $params = array_merge($params, $filter); + } + else { + $sql .= ' ' . $filter; + } + } + $sql .= ' RETURNING *'; + return $this->query($sql, $params); + } +}