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); } }