/** * 启动事务 */ function startTrans() { $this->_transCount += 1; try { $this->conn->rollBack(); } catch (PDOException $e) { } $this->conn->beginTransaction(); }
/** * Destroys the given Token object, by invalidating and removing it from the backend. * @access public * @param mixed $token Token object. * @return boolean True if succesful, false if the Token could not be destroyed. */ public function destroyToken($token) { if (!$token instanceof Token) { return false; } if (empty($token->username) || empty($token->valid_until) || empty($token->hash)) { return false; } $this->connection->beginTransaction(); $stat = $this->connection->prepare(sprintf("DELETE FROM `%s` WHERE token_hash = :hash;", PowerDnsConfig::DB_TOKEN_TABLE)); if ($stat->execute(array(":hash" => $token->hash)) === false) { $this->connection->rollback(); return false; } else { $this->connection->commit(); return true; } }
protected function createDatabaseTables() { $queries = array(); switch ($this->database_driver) { case self::SI_DRIVER_SQLITE3: $queries[] = "CREATE TABLE \"{$this->database_table}\" (\n id VARCHAR(40),\n namespace VARCHAR(32) NOT NULL,\n code VARCHAR(32) NOT NULL,\n code_display VARCHAR(32) NOT NULL,\n created INTEGER NOT NULL,\n PRIMARY KEY(id, namespace)\n )"; $queries[] = "CREATE INDEX ndx_created ON {$this->database_table} (created)"; break; case self::SI_DRIVER_MYSQL: $queries[] = "CREATE TABLE `{$this->database_table}` (\n `id` VARCHAR(40) NOT NULL,\n `namespace` VARCHAR(32) NOT NULL,\n `code` VARCHAR(32) NOT NULL,\n `code_display` VARCHAR(32) NOT NULL,\n `created` INT NOT NULL,\n PRIMARY KEY(id, namespace),\n INDEX(created)\n )"; break; case self::SI_DRIVER_PGSQL: $queries[] = "CREATE TABLE {$this->database_table} (\n id character varying(40) NOT NULL,\n namespace character varying(32) NOT NULL,\n code character varying(32) NOT NULL,\n code_display character varying(32) NOT NULL,\n created integer NOT NULL,\n CONSTRAINT pkey_id_namespace PRIMARY KEY (id, namespace)\n )"; $queries[] = "CREATE INDEX ndx_created ON {$this->database_table} (created);"; break; } $this->pdo_conn->beginTransaction(); foreach ($queries as $query) { $result = $this->pdo_conn->query($query); if (!$result) { $err = $this->pdo_conn->errorInfo(); trigger_error("Failed to create table. {$err[1]}: {$err[2]}", E_USER_WARNING); $this->pdo_conn->rollBack(); $this->pdo_conn = false; return false; } } $this->pdo_conn->commit(); return true; }
/** * Initiates a transaction * * @return bool */ public function beginTransaction() { return $this->_conn->beginTransaction(); }
/** * Begin a transaction. */ protected function _beginTransaction() { $this->_connect(); $this->connection->beginTransaction(); }