/** * Migrate the schema to one version to another * * @access public * @param integer $current_version * @param integer $next_version * @return boolean */ public function migrateTo($current_version, $next_version) { try { $this->db->startTransaction(); $this->db->getDriver()->disableForeignKeys(); for ($i = $current_version + 1; $i <= $next_version; $i++) { $function_name = '\\Schema\\version_' . $i; if (function_exists($function_name)) { call_user_func($function_name, $this->db->getConnection()); } } $this->db->getDriver()->setSchemaVersion($i - 1); $this->db->getDriver()->enableForeignKeys(); $this->db->closeTransaction(); } catch (PDOException $e) { $this->db->setLogMessage($function_name . ' => ' . $e->getMessage()); $this->db->cancelTransaction(); $this->db->getDriver()->enableForeignKeys(); return false; } return true; }
/** * Execute a prepared statement * * Note: returns false on duplicate keys instead of SQLException * * @access public * @return PDOStatement|false */ public function execute() { try { $this->beforeExecute(); $pdoStatement = $this->db->getConnection()->prepare($this->sql); $this->bindParams($pdoStatement); $pdoStatement->execute(); $this->afterExecute(); return $pdoStatement; } catch (PDOException $e) { return $this->handleSqlError($e); } }