Add PgDatabase class for Postgres connections
This commit is contained in:
parent
7c940b058d
commit
c4efc9a21d
|
@ -1,5 +1,74 @@
|
|||
<?php
|
||||
|
||||
class PgDatabase {
|
||||
|
||||
private $db = null;
|
||||
|
||||
public function __construct() {
|
||||
$instance = isset($_GET['instance']) ? trim($_GET['instance']) : null;
|
||||
if ($instance === null) return;
|
||||
$url = trim($_SERVER['REQUEST_URI'], '/');
|
||||
$url = substr($url, 7); // api/vX/
|
||||
$ps = explode('/', $url);
|
||||
if ($ps[0] !== 'database') return;
|
||||
$software = $ps[1];
|
||||
|
||||
if (!preg_match('/^[a-zA-Z0-9\.\-\_]+$/', $instance))
|
||||
apiresult(['error' => 'instance parameter is not correctly formatted'], 400);
|
||||
if (!preg_match('/^[a-zA-Z0-9\.\-\_]+$/', $software))
|
||||
apiresult(['error' => 'software parameter is not correctly formatted'], 400);
|
||||
|
||||
$GLOBALS['IS_PHP'] = true;
|
||||
require 'api/v1/config/get/mod.php';
|
||||
unset($GLOBALS['IS_PHP']);
|
||||
|
||||
$found = false;
|
||||
foreach ($GLOBALS['api_data']['hosts'][$software] as $ins_cfg) {
|
||||
if ($ins_cfg['instance'] === $instance) {
|
||||
$found = $ins_cfg;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ($found === false) return;
|
||||
$config = [];
|
||||
$config_raw = explode("\n", trim($found['config']));
|
||||
foreach ($config_raw as $ln) {
|
||||
$k = substr($ln, 0, strpos($ln,'='));
|
||||
$v = substr($ln, strpos($ln,'=')+1);
|
||||
$config[$k] = $v;
|
||||
}
|
||||
|
||||
$this->db = pg_connect(
|
||||
' host='.$config['psql_host'].
|
||||
' port='.$config['psql_port'].
|
||||
' dbname='.$config['psql_db'].
|
||||
' user='.$config['psql_username'].
|
||||
' password='.$config['psql_password'].
|
||||
'') or apiresult('Could not connect to postgres: '.pg_last_error());
|
||||
}
|
||||
|
||||
public function is_ok() {
|
||||
return $this->db !== null;
|
||||
}
|
||||
|
||||
public function query($sql) {
|
||||
$result = pg_query($sql);
|
||||
if (!$result) apiresult('The postgres query has failed: '.pg_last_error());
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function fetch_all($sql) {
|
||||
$data = [];
|
||||
$result = $this->query($sql);
|
||||
while ($line = pg_fetch_array($result, null, PGSQL_ASSOC)) {
|
||||
$data []= $line;
|
||||
}
|
||||
pg_free_result($result);
|
||||
return $data;
|
||||
}
|
||||
|
||||
public function close($result=null) {
|
||||
if ($result !== null)
|
||||
pg_free_result($result);
|
||||
pg_close($this->db);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue