requiredAtttributes as $attribute) { if (! isset($settings[$attribute])) { throw new LogicException('This configuration parameter is missing: "'.$attribute.'"'); } } $this->createConnection($settings); $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } /** * Get the PDO connection * * @access public * @return PDO */ public function getConnection() { return $this->pdo; } /** * Release the PDO connection * * @access public */ public function closeConnection() { $this->pdo = null; } /** * Upsert for a key/value variable * * @access public * @param string $table * @param string $keyColumn * @param string $valueColumn * @param array $dictionary * @return bool False on failure */ public function upsert($table, $keyColumn, $valueColumn, array $dictionary) { try { $this->pdo->beginTransaction(); foreach ($dictionary as $key => $value) { $rq = $this->pdo->prepare('SELECT 1 FROM '.$this->escape($table).' WHERE '.$this->escape($keyColumn).'=?'); $rq->execute(array($key)); if ($rq->fetchColumn()) { $rq = $this->pdo->prepare('UPDATE '.$this->escape($table).' SET '.$this->escape($valueColumn).'=? WHERE '.$this->escape($keyColumn).'=?'); $rq->execute(array($value, $key)); } else { $rq = $this->pdo->prepare('INSERT INTO '.$this->escape($table).' ('.$this->escape($keyColumn).', '.$this->escape($valueColumn).') VALUES (?, ?)'); $rq->execute(array($key, $value)); } } $this->pdo->commit(); return true; } catch (PDOException $e) { $this->pdo->rollback(); return false; } } }