From 9232a4bf7488c0ff4c0b6878d2f2253978865fbc Mon Sep 17 00:00:00 2001 From: ghost Date: Sun, 27 Aug 2023 19:16:23 +0300 Subject: [PATCH] fix null uri values support --- database/yggtracker.mwb | Bin 26010 -> 26019 bytes src/library/database.php | 139 ++++++++++++--------------------------- 2 files changed, 42 insertions(+), 97 deletions(-) diff --git a/database/yggtracker.mwb b/database/yggtracker.mwb index 13cb59706d1a6add7f18d7a4c41efc4d34e9c7af..35df347c6e8daedd9eeb2942c258df4006501d9d 100644 GIT binary patch delta 22970 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 delta 23009 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 diff --git a/src/library/database.php b/src/library/database.php index 90132b7..9ce7bb4 100644 --- a/src/library/database.php +++ b/src/library/database.php @@ -151,18 +151,9 @@ class Database { $this->_debug->query->insert->total++; - if ($value) { + $query = $this->_db->prepare('INSERT INTO `port` SET `value` = ?'); - $query = $this->_db->prepare('INSERT INTO `port` SET `value` = ?'); - - $query->execute([$value]); - - } else { - - $query = $this->_db->prepare('INSERT INTO `port` SET `value` = NULL'); - - $query->execute(); - } + $query->execute([$value]); return $this->_db->lastInsertId(); } @@ -190,9 +181,7 @@ class Database { } else { - $query = $this->_db->prepare('SELECT * FROM `port` WHERE `value` IS NULL'); - - $query->execute(); + $query = $this->_db->query('SELECT * FROM `port` WHERE `value` IS NULL'); } return $query->fetch(); @@ -209,7 +198,7 @@ class Database { } // URI - public function addUri(string $value) : int { + public function addUri(mixed $value) : int { $this->_debug->query->insert->total++; @@ -231,18 +220,25 @@ class Database { return $query->fetch(); } - public function findUri(string $value) { + public function findUri(mixed $value) { $this->_debug->query->select->total++; - $query = $this->_db->prepare('SELECT * FROM `uri` WHERE `value` = ?'); + if ($value) { - $query->execute([$value]); + $query = $this->_db->prepare('SELECT * FROM `uri` WHERE `value` = ?'); + + $query->execute([$value]); + + } else { + + $query = $this->_db->query('SELECT * FROM `uri` WHERE `value` IS NULL'); + } return $query->fetch(); } - public function initUriId(string $value) : int { + public function initUriId(mixed $value) : int { if ($result = $this->findUri($value)) { @@ -253,22 +249,13 @@ class Database { } // Address Tracker - public function addAddressTracker(int $schemeId, int $hostId, int $portId, int $uriId) : int { + public function addAddressTracker(int $schemeId, int $hostId, mixed $portId, mixed $uriId) : int { $this->_debug->query->insert->total++; - if ($portId) { + $query = $this->_db->prepare('INSERT INTO `addressTracker` SET `schemeId` = ?, `hostId` = ?, `portId` = ?, `uriId` = ?'); - $query = $this->_db->prepare('INSERT INTO `addressTracker` SET `schemeId` = ?, `hostId` = ?, `portId` = ?, `uriId` = ?'); - - $query->execute([$schemeId, $hostId, $portId, $uriId]); - - } else { - - $query = $this->_db->prepare('INSERT INTO `addressTracker` SET `schemeId` = ?, `hostId` = ?, `portId` = NULL, `uriId` = ?'); - - $query->execute([$schemeId, $hostId, $uriId]); - } + $query->execute([$schemeId, $hostId, $portId, $uriId]); return $this->_db->lastInsertId(); } @@ -284,27 +271,19 @@ class Database { return $query->fetch(); } - public function findAddressTracker(int $schemeId, int $hostId, mixed $portId, int $uriId) { + public function findAddressTracker(int $schemeId, int $hostId, mixed $portId, mixed $uriId) { $this->_debug->query->select->total++; - if ($portId) { - - $query = $this->_db->prepare('SELECT * FROM `addressTracker` WHERE `schemeId` = ? AND `hostId` = ? AND `portId` = ? AND `uriId` = ?'); - - $query->execute([$schemeId, $hostId, $portId, $uriId]); - - } else { - - $query = $this->_db->prepare('SELECT * FROM `addressTracker` WHERE `schemeId` = ? AND `hostId` = ? AND `portId` IS NULL AND `uriId` = ?'); - - $query->execute([$schemeId, $hostId, $uriId]); - } + $query = $this->_db->query('SELECT * FROM `addressTracker` WHERE `schemeId` = ' . (int) $schemeId . ' + AND `hostId` = ' . (int) $hostId . ' + AND `portId` ' . ($portId ? ' = ' . (int) $portId : ' IS NULL ') . ' + AND `uriId` ' . ($uriId ? ' = ' . (int) $uriId : ' IS NULL ')); return $query->fetch(); } - public function initAddressTrackerId(int $schemeId, int $hostId, mixed $portId, int $uriId) : int { + public function initAddressTrackerId(int $schemeId, int $hostId, mixed $portId, mixed $uriId) : int { if ($result = $this->findAddressTracker($schemeId, $hostId, $portId, $uriId)) { @@ -315,22 +294,13 @@ class Database { } // Acceptable Source - public function addAcceptableSource(int $schemeId, int $hostId, int $portId, int $uriId) : int { + public function addAcceptableSource(int $schemeId, int $hostId, mixed $portId, mixed $uriId) : int { $this->_debug->query->insert->total++; - if ($portId) { + $query = $this->_db->prepare('INSERT INTO `acceptableSource` SET `schemeId` = ?, `hostId` = ?, `portId` = ?, `uriId` = ?'); - $query = $this->_db->prepare('INSERT INTO `acceptableSource` SET `schemeId` = ?, `hostId` = ?, `portId` = ?, `uriId` = ?'); - - $query->execute([$schemeId, $hostId, $portId, $uriId]); - - } else { - - $query = $this->_db->prepare('INSERT INTO `acceptableSource` SET `schemeId` = ?, `hostId` = ?, `portId` = NULL, `uriId` = ?'); - - $query->execute([$schemeId, $hostId, $uriId]); - } + $query->execute([$schemeId, $hostId, $portId, $uriId]); return $this->_db->lastInsertId(); } @@ -346,27 +316,19 @@ class Database { return $query->fetch(); } - public function findAcceptableSource(int $schemeId, int $hostId, mixed $portId, int $uriId) { + public function findAcceptableSource(int $schemeId, int $hostId, mixed $portId, mixed $uriId) { $this->_debug->query->select->total++; - if ($portId) { - - $query = $this->_db->prepare('SELECT * FROM `acceptableSource` WHERE `schemeId` = ? AND `hostId` = ? AND `portId` = ? AND `uriId` = ?'); - - $query->execute([$schemeId, $hostId, $portId, $uriId]); - - } else { - - $query = $this->_db->prepare('SELECT * FROM `acceptableSource` WHERE `schemeId` = ? AND `hostId` = ? AND `portId` IS NULL AND `uriId` = ?'); - - $query->execute([$schemeId, $hostId, $uriId]); - } + $query = $this->_db->query('SELECT * FROM `acceptableSource` WHERE `schemeId` = ' . (int) $schemeId . ' + AND `hostId` = ' . (int) $hostId . ' + AND `portId` ' . ($portId ? ' = ' . (int) $portId : ' IS NULL ') . ' + AND `uriId` ' . ($uriId ? ' = ' . (int) $uriId : ' IS NULL ')); return $query->fetch(); } - public function initAcceptableSourceId(int $schemeId, int $hostId, mixed $portId, int $uriId) : int { + public function initAcceptableSourceId(int $schemeId, int $hostId, mixed $portId, mixed $uriId) : int { if ($result = $this->findAcceptableSource($schemeId, $hostId, $portId, $uriId)) { @@ -377,22 +339,13 @@ class Database { } // eXact Source - public function addExactSource(int $schemeId, int $hostId, int $portId, int $uriId) : int { + public function addExactSource(int $schemeId, int $hostId, mixed $portId, mixed $uriId) : int { $this->_debug->query->insert->total++; - if ($portId) { + $query = $this->_db->prepare('INSERT INTO `eXactSource` SET `schemeId` = ?, `hostId` = ?, `portId` = ?, `uriId` = ?'); - $query = $this->_db->prepare('INSERT INTO `eXactSource` SET `schemeId` = ?, `hostId` = ?, `portId` = ?, `uriId` = ?'); - - $query->execute([$schemeId, $hostId, $portId, $uriId]); - - } else { - - $query = $this->_db->prepare('INSERT INTO `eXactSource` SET `schemeId` = ?, `hostId` = ?, `portId` = NULL, `uriId` = ?'); - - $query->execute([$schemeId, $hostId, $uriId]); - } + $query->execute([$schemeId, $hostId, $portId, $uriId]); return $this->_db->lastInsertId(); } @@ -408,27 +361,19 @@ class Database { return $query->fetch(); } - public function findExactSource(int $schemeId, int $hostId, mixed $portId, int $uriId) { + public function findExactSource(int $schemeId, int $hostId, mixed $portId, mixed $uriId) { $this->_debug->query->select->total++; - if ($portId) { - - $query = $this->_db->prepare('SELECT * FROM `eXactSource` WHERE `schemeId` = ? AND `hostId` = ? AND `portId` = ? AND `uriId` = ?'); - - $query->execute([$schemeId, $hostId, $portId, $uriId]); - - } else { - - $query = $this->_db->prepare('SELECT * FROM `eXactSource` WHERE `schemeId` = ? AND `hostId` = ? AND `portId` IS NULL AND `uriId` = ?'); - - $query->execute([$schemeId, $hostId, $uriId]); - } + $query = $this->_db->query('SELECT * FROM `eXactSource` WHERE `schemeId` = ' . (int) $schemeId . ' + AND `hostId` = ' . (int) $hostId . ' + AND `portId` ' . ($portId ? ' = ' . (int) $portId : ' IS NULL ') . ' + AND `uriId` ' . ($uriId ? ' = ' . (int) $uriId : ' IS NULL ')); return $query->fetch(); } - public function initExactSourceId(int $schemeId, int $hostId, mixed $portId, int $uriId) : int { + public function initExactSourceId(int $schemeId, int $hostId, mixed $portId, mixed $uriId) : int { if ($result = $this->findExactSource($schemeId, $hostId, $portId, $uriId)) {