#### Назначение

Класс SafePostgres предоставляет безопасный и удобный способ работы с базой данных PostgreSQL, используя паттерн Singleton для обеспечения единственного подключения. Он поддерживает выполнение SQL-запросов с использованием плейсхолдеров для безопасной подстановки значений и защиты от SQL-инъекций.

#### Методы класса

Класс SafePostgres предлагает методы для выполнения SQL-запросов, получения результатов, работы с плейсхолдерами и фильтрации данных.

- query

  `public function query(string $query, ...$args): bool`

  Выполняет SQL-запрос с поддержкой плейсхолдеров.

  - Параметры:
    - `query` (string): SQL-запрос с плейсхолдерами.
    - `...$args` (mixed): Аргументы для замены плейсхолдеров.
  - Возвращает: `bool` - Успешность выполнения запроса.

  Пример:

      $db = SafePostgres::gI();
      $db->query("INSERT INTO users (name, email) VALUES (?s, ?s)", 'John Doe', 'john@example.com');

- getOne

  `public function getOne(string $query, ...$args): mixed`

  Возвращает одно значение из результата SQL-запроса.

  - Параметры:
    - `query` (string): SQL-запрос с плейсхолдерами.
    - `...$args` (mixed): Аргументы для замены плейсхолдеров.
  - Возвращает: `mixed` - Значение первой колонки первой строки результата или false.

  Пример:

      $db = SafePostgres::gI();
      $userName = $db->getOne("SELECT name FROM users WHERE id = ?i", 1);
      echo $userName;

- getRow

  `public function getRow(string $query, ...$args): array|false`

  Возвращает одну строку в виде ассоциативного массива.

  - Параметры:
    - `query` (string): SQL-запрос с плейсхолдерами.
    - `...$args` (mixed): Аргументы для замены плейсхолдеров.
  - Возвращает: `array|false` - Ассоциативный массив с данными строки или false.

  Пример:

      $db = SafePostgres::gI();
      $userData = $db->getRow("SELECT * FROM users WHERE id = ?i", 1);
      print_r($userData);

- getCol

  `public function getCol(string $query, ...$args): array`

  Возвращает массив значений одного столбца.

  - Параметры:
    - `query` (string): SQL-запрос с плейсхолдерами.
    - `...$args` (mixed): Аргументы для замены плейсхолдеров.
  - Возвращает: `array` - Массив значений одного столбца.

  Пример:

      $db = SafePostgres::gI();
      $userEmails = $db->getCol("SELECT email FROM users");
      print_r($userEmails);

- getAll

  `public function getAll(string $query, ...$args): array`

  Возвращает все строки результата SQL-запроса в виде массива.

  - Параметры:
    - `query` (string): SQL-запрос с плейсхолдерами.
    - `...$args` (mixed): Аргументы для замены плейсхолдеров.
  - Возвращает: `array` - Массив строк результата запроса.

  Пример:

      $db = SafePostgres::gI();
      $users = $db->getAll("SELECT * FROM users");
      print_r($users);

- filterArray

  `public function filterArray(array $input, array $allowed): array`

  Фильтрует массив, оставляя только разрешенные ключи.

  - Параметры:
    - `input` (array): Входной массив.
    - `allowed` (array): Список разрешенных ключей.
  - Возвращает: `array` - Отфильтрованный массив.

  Пример:

      $db = SafePostgres::gI();
      $allowedFields = ['name', 'email'];
      $postData = $_POST;
      $filteredData = $db->filterArray($postData, $allowedFields);
      print_r($filteredData);

#### Примеры использования

Добавление данных в таблицу

Используйте метод `query`, чтобы безопасно вставить данные в базу с использованием плейсхолдеров:

    $db = SafePostgres::gI();
    $db->query("INSERT INTO users (name, email) VALUES (?s, ?s)", 'Jane Doe', 'jane@example.com');

Получение одной строки

Метод `getRow` возвращает одну строку в виде ассоциативного массива:

    $db = SafePostgres::gI();
    $user = $db->getRow("SELECT * FROM users WHERE id = ?i", 2);
    print_r($user);

Фильтрация данных перед запросом

С помощью метода `filterArray` вы можете отфильтровать входные данные перед вставкой в базу:

    $db = SafePostgres::gI();
    $allowedFields = ['name', 'email'];
    $filteredData = $db->filterArray($_POST, $allowedFields);
    $sql = "INSERT INTO users SET ?u";
    $db->query($sql, $filteredData);

#### Вывод

Класс SafePostgres обеспечивает безопасное взаимодействие с PostgreSQL, используя PDO и систему плейсхолдеров. Он упрощает выполнение запросов, получение данных и защиту от SQL-инъекций, позволяя легко управлять базой данных в вашем приложении.