conn = $conn; $this->query = ''; $this->set = FALSE; $this->where = FALSE; $this->param = array(); } private function in($array) { $in = 'IN ('; foreach ($array as $idx => $item) { if ($idx != 0) { $in .= ","; } $in .= "?"; array_push($this->param, $item); } $in .= ")"; return $in; } public function select($select) { $this->query .= "SELECT $select\n"; return $this; } public function from($from) { $this->query .= "FROM $from\n"; return $this; } public function where($cond) { if (!$this->where) { $this->where = TRUE; $this->query .= "WHERE "; } $this->query .= "$cond "; return $this; } public function like($item) { $this->query .= "LIKE ?\n"; array_push($this->param, $item); return $this; } public function eq($item) { $this->query .= "= ?\n"; array_push($this->param, $item); return $this; } public function ne($item) { $this->query .= "<> ?\n"; array_push($this->param, $item); return $this; } public function lt($item) { $this->query .= "< ?\n"; array_push($this->param, $item); return $this; } public function le($item) { $this->query .= "<= ?\n"; array_push($this->param, $item); return $this; } public function where_in($column, $array) { if (!$this->where) { $this->where = TRUE; $this->query .= "WHERE "; } if (empty($array)) { $this->query .= "FALSE\n"; return $this; } $in = $this->in($array); $this->query .= "$column $in\n"; return $this; } public function and() { $this->query .= "AND "; return $this; } public function or() { $this->query .= "OR "; return $this; } public function join($table, $on, $type = 'LEFT') { $this->query .= "$type JOIN $table ON $on\n"; return $this; } public function limit($limit) { $this->query .= "LIMIT ?\n"; array_push($this->param, $limit); return $this; } public function offset($offset) { $this->query .= "OFFSET ?\n"; array_push($this->param, $offset); return $this; } public function rows() { $stmt = $this->conn->prepare($this->query); try { $stmt->execute($this->param); } catch (Exception $ex) { echo $ex; echo '
>> caused by <<
'; echo str_replace("\n", "
", $this->query); } return $stmt->fetchAll(PDO::FETCH_ASSOC); } public function row() { $stmt = $this->conn->prepare($this->query); $stmt->execute($this->param); return $stmt->fetch(PDO::FETCH_ASSOC); } } /** * DatabaseHelper * allows queries on the * xssbook postgres database */ class DatabaseHelper { private $conn; function __construct() { $this->conn = NULL; } private function connect() { if ($this->conn === NULL) { $user = getenv("POSTGRES_USER"); $pass = getenv("POSTGRES_PASSWORD"); $db = getenv("POSTGRES_DB"); $host = 'db'; $port = '5432'; $conn_str = sprintf("pgsql:host=%s;port=%d;dbname=%s;user=%s;password=%s", $host, $port, $db, $user, $pass ); $this->conn = new \PDO($conn_str); $this->conn->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); } return $this->conn; } public function select($select) { $conn = $this->connect(); $query = new DatabaseQuery($conn); return $query->select($select); } }