12a82eb59badad8092c2ed8af8e84307ff90d249
[minimedit.git] / database.inc.php
1 <?php
2 $dsn = require '.dbconfig.inc.php';
3 $Db = new DB($dsn);
4
5 class DB
6 {
7         public $dbh;
8
9         function __construct($config, $options = [])
10         {
11                 $options += [
12                         PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
13                         PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ,
14                 ];
15                 $this->dbh = new PDO($config, NULL, NULL, $options);
16         }
17
18         function query($sql, $params = [])
19         {
20                 $stmt = $this->dbh->prepare($sql);
21                 $stmt->execute($params);
22                 return $stmt;
23         }
24
25         function _value($val, &$params)
26         {
27                 if (is_array($val)) {
28                         $sql = array_shift($val);
29                         $params = array_merge($params, $val);
30                         return $sql;
31                 }
32
33                 $params[] = $val;
34                 return '?';
35         }
36
37         function set($table, $row, $filter = NULL)
38         {
39                 $params = [];
40                 if (is_null($filter)) {
41                         $cols = [];
42                         foreach ($row as $col => $val) {
43                                 $cols[] = $this->_value($val, $params);
44                         }
45                         $sql = sprintf('INSERT INTO %s (%s) VALUES (%s) RETURNING id',
46                                 '"'.$table.'"',
47                                 implode(', ', array_keys($row)),
48                                 implode(', ', $cols)
49                         );
50                 }
51                 else {
52                         $sql = 'UPDATE "'.$table.'"';
53                         $cols = [];
54                         foreach ($row as $col => $val) {
55                                 $cols[] = $col . ' = ' . $this->_value($val, $params);
56                         }
57
58                         $sql .= ' SET ' . implode(', ', $cols);
59                         if (is_array($filter)) {
60                                 $sql .= ' WHERE ' . array_shift($filter);
61                                 $params = array_merge($params, $filter);
62                         }
63                         else {
64                                 $sql .= ' ' . $filter;
65                         }
66                 }
67                 return $this->query($sql, $params);
68         }
69 }