query = $query; $this->conn = $conn; } /** * @param int|string $n * @param int $value */ function setInt($n, $value): void { $this->binds [] = [$n, $value, PDO::PARAM_INT]; } /** * @param int|string $n * @param string $value */ function setString($n, $value): void { $this->binds [] = [$n, $value, PDO::PARAM_STR]; } /** * @param int|string $n * @param mixed $value */ function setBlob($n, $value): void { $this->binds [] = [$n, $value, PDO::PARAM_LOB]; } /** * @param int $limit */ function setLimit($limit): void { $this->limit = $limit; } /** * @param int $offset */ function setOffset($offset): void { $this->offset = $offset; } /** * @return ?PDOStatement */ function executeQuery() { if ($this->limit) { $this->query .= " LIMIT {$this->limit} OFFSET {$this->offset}"; } $stmt = $this->conn->prepare($this->query); foreach ($this->binds as $bind) { list($n, $value, $type) = $bind; $stmt->bindValue($n, $value, (int) $type); } $stmt->execute(); $stmt->cache = $stmt->fetchAll(PDO::FETCH_ASSOC); return $stmt; } }