+
+ function _value($val, &$params)
+ {
+ if (is_array($val)) {
+ $sql = array_shift($val);
+ $params = array_merge($params, $val);
+ return $sql;
+ }
+
+ $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;
+ }
+ }
+ return $this->query($sql, $params);
+ }