_db = new PDO('sqlite:' . $database, $username, $password, [PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8']); $this->_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $this->_db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); $this->_db->setAttribute(PDO::ATTR_TIMEOUT, 600); } catch(PDOException $e) { trigger_error($e->getMessage()); } } public function getLastBlock() { try { $query = $this->_db->query('SELECT MAX(`blockId`) AS `lastBlock` FROM `block`')->fetch(); return (int) $query['lastBlock']; } catch(PDOException $e) { trigger_error($e->getMessage()); return false; } } public function getBlock($blockId) { try { $query = $this->_db->prepare('SELECT `blockId` FROM `block` WHERE `blockId` = ? LIMIT 1'); $query->execute([$blockId]); $result = $query->fetch(); return $result ? $result['blockId'] : false; } catch(PDOException $e) { trigger_error($e->getMessage()); return false; } } public function getNameSpace($hash) { try { $query = $this->_db->prepare('SELECT `nameSpaceId` FROM `namespace` WHERE `hash` = ? LIMIT 1'); $query->execute([$hash]); $result = $query->fetch(); return $result ? $result['nameSpaceId'] : false; } catch(PDOException $e) { trigger_error($e->getMessage()); return false; } } public function getData($txId) { try { $query = $this->_db->prepare('SELECT `dataId` FROM `data` WHERE `txId` = ? LIMIT 1'); $query->execute([$txId]); $result = $query->fetch(); return $result ? $result['dataId'] : false; } catch(PDOException $e) { trigger_error($e->getMessage()); return false; } } public function addBlock($blockId) { try { $query = $this->_db->prepare('INSERT INTO `block` (`blockId`, `lostTransactions`, `timeIndexed`) VALUES (?, 0, ?)'); $query->execute([$blockId, time()]); return $blockId; } catch(PDOException $e) { trigger_error($e->getMessage()); return false; } } public function setLostTransactions($blockId, $lostTransactions) { try { $query = $this->_db->prepare('UPDATE `block` SET `lostTransactions` = ? WHERE `blockId` = ? LIMIT 1'); $query->execute([$lostTransactions, $blockId]); return $blockId; } catch(PDOException $e) { trigger_error($e->getMessage()); return false; } } public function addNameSpace($hash) { try { $query = $this->_db->prepare('INSERT INTO `namespace` (`hash`, `timeIndexed`) VALUES (?, ?)'); $query->execute([$hash, time()]); return $this->_db->lastInsertId(); } catch(PDOException $e) { trigger_error($e->getMessage()); return false; } } public function addData($blockId, $nameSpaceId, $time, $size, $txid, $key, $value, $ns, $deleted = false) { try { $query = $this->_db->prepare('INSERT INTO `data` ( `blockId`, `nameSpaceId`, `time`, `size`, `txid`, `key`, `value`, `deleted`, `ns`, `timeIndexed` ) VALUES ( :blockId, :nameSpaceId, :time, :size, :txid, :key, :value, :deleted, :ns, :timeIndexed )'); $query->bindValue(':blockId', $blockId, PDO::PARAM_INT); $query->bindValue(':nameSpaceId', $nameSpaceId, PDO::PARAM_INT); $query->bindValue(':time', $time, PDO::PARAM_INT); $query->bindValue(':size', $size, PDO::PARAM_INT); $query->bindValue(':txid', $txid, PDO::PARAM_STR); $query->bindValue(':key', $key, PDO::PARAM_STR); $query->bindValue(':value', $value, PDO::PARAM_STR); $query->bindValue(':deleted', (int) $deleted, PDO::PARAM_STR); $query->bindValue(':ns', (int) $ns, PDO::PARAM_STR); $query->bindValue(':timeIndexed', time(), PDO::PARAM_INT); $query->execute(); return $this->_db->lastInsertId(); } catch(PDOException $e) { trigger_error($e->getMessage()); return false; } } public function setDataKeyDeleted($nameSpaceId, $key, $deleted) { try { $query = $this->_db->prepare('UPDATE `data` SET `deleted` = :deleted WHERE `nameSpaceId` = :nameSpaceId AND `key` LIKE :key'); $query->bindValue(':nameSpaceId', $nameSpaceId, PDO::PARAM_INT); $query->bindValue(':key', $key, PDO::PARAM_STR); $query->bindValue(':deleted', (int) $deleted, PDO::PARAM_STR); $query->execute(); return $query->rowCount(); } catch(PDOException $e) { trigger_error($e->getMessage()); return false; } } }