login/pass: error messages below page title
[minimedit.git] / database.inc.php
index 464126b3fad1370fe17f6e32dd4863a92dd759a5..d6da853c1a6f61b2529e71ff4640078960d3f07d 100644 (file)
@@ -24,22 +24,50 @@ class DB
 
        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 insert($table, $row)
+       function set($table, $row, $filter = NULL)
        {
                $params = [];
-               $cols = [];
-               foreach ($row as $col => $val) {
-                       $cols[] = $this->_value($val, $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 = sprintf('INSERT INTO %s (%s) VALUES (%s)',
-                       '"'.$table.'"',
-                       implode(', ', array_keys($row)),
-                       implode(', ', $cols)
-               );
+               $sql .= ' RETURNING *';
                return $this->query($sql, $params);
        }
 }