X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/61386c5b4daab71fd2f0a58c170a0910aa46e5be..0b755473bfa03610541c260e628b5d567b627b16:/lib/DB.php diff --git a/lib/DB.php b/lib/DB.php index 033e23f7..51fd49fc 100644 --- a/lib/DB.php +++ b/lib/DB.php @@ -74,12 +74,7 @@ class DB public function getRow($sSQL, $aInputVars = null, $sErrMessage = 'Database query failed') { try { - if (isset($aInputVars)) { - $stmt = $this->connection->prepare($sSQL); - $stmt->execute($aInputVars); - } else { - $stmt = $this->connection->query($sSQL); - } + $stmt = $this->getQueryStatement($sSQL, $aInputVars, $sErrMessage); $row = $stmt->fetch(); } catch (\PDOException $e) { throw new \Nominatim\DatabaseError($sErrMessage, 500, null, $e, $sSQL); @@ -98,12 +93,7 @@ class DB public function getOne($sSQL, $aInputVars = null, $sErrMessage = 'Database query failed') { try { - if (isset($aInputVars)) { - $stmt = $this->connection->prepare($sSQL); - $stmt->execute($aInputVars); - } else { - $stmt = $this->connection->query($sSQL); - } + $stmt = $this->getQueryStatement($sSQL, $aInputVars, $sErrMessage); $row = $stmt->fetch(\PDO::FETCH_NUM); if ($row === false) return false; } catch (\PDOException $e) { @@ -123,12 +113,7 @@ class DB public function getAll($sSQL, $aInputVars = null, $sErrMessage = 'Database query failed') { try { - if (isset($aInputVars)) { - $stmt = $this->connection->prepare($sSQL); - $stmt->execute($aInputVars); - } else { - $stmt = $this->connection->query($sSQL); - } + $stmt = $this->getQueryStatement($sSQL, $aInputVars, $sErrMessage); $rows = $stmt->fetchAll(); } catch (\PDOException $e) { throw new \Nominatim\DatabaseError($sErrMessage, 500, null, $e, $sSQL); @@ -148,12 +133,8 @@ class DB { $aVals = array(); try { - if (isset($aInputVars)) { - $stmt = $this->connection->prepare($sSQL); - $stmt->execute($aInputVars); - } else { - $stmt = $this->connection->query($sSQL); - } + $stmt = $this->getQueryStatement($sSQL, $aInputVars, $sErrMessage); + while ($val = $stmt->fetchColumn(0)) { // returns first column or false $aVals[] = $val; } @@ -174,12 +155,8 @@ class DB public function getAssoc($sSQL, $aInputVars = null, $sErrMessage = 'Database query failed') { try { - if (isset($aInputVars)) { - $stmt = $this->connection->prepare($sSQL); - $stmt->execute($aInputVars); - } else { - $stmt = $this->connection->query($sSQL); - } + $stmt = $this->getQueryStatement($sSQL, $aInputVars, $sErrMessage); + $aList = array(); while ($aRow = $stmt->fetch(\PDO::FETCH_NUM)) { $aList[$aRow[0]] = $aRow[1]; @@ -190,6 +167,27 @@ class DB return $aList; } + /** + * Executes query. Returns a PDO statement to iterate over. + * + * @param string $sSQL + * + * @return PDOStatement + */ + public function getQueryStatement($sSQL, $aInputVars = null, $sErrMessage = 'Database query failed') + { + try { + if (isset($aInputVars)) { + $stmt = $this->connection->prepare($sSQL); + $stmt->execute($aInputVars); + } else { + $stmt = $this->connection->query($sSQL); + } + } catch (\PDOException $e) { + throw new \Nominatim\DatabaseError($sErrMessage, 500, null, $e, $sSQL); + } + return $stmt; + } /** * St. John's Way => 'St. John\'s Way' @@ -229,12 +227,6 @@ class DB return 'ARRAY['.join(',', $a).']'; } - public function getLastError() - { - // https://secure.php.net/manual/en/pdo.errorinfo.php - return $this->connection->errorInfo(); - } - /** * Check if a table exists in the database. Returns true if it does. *