Передать переменную в запрос PQexec, ошибка Syntax error at or near, клиент с++

Здравствуйте, подскажите пожалуйста почему я получаю ошибку типа Syntax error at or near @,
Почему я не могу в запросе передавать символы, а также цифры.
как правильно организовать запрос через библиотеку libpq.
В чем моя ошибка?

int main()
{
 
	const char *conninfo;
	PGconn     *conn;
	int         nnotifies;
	PGnotify   *notify;
 
	string EmailToDB = "gfdgfdshj@mail.ru";
	string PswdToDb = "1234";
	const char *paramValues[2] = { (char *)&EmailToDB, (char *)&PswdToDb };
 
 
	conninfo = "hostaddr = '192.168.0.130' port = '5432' dbname = 'reg_user' user = 'postgres' password = 'pass' connect_timeout = '2'";
 
	conn = PQconnectdb(conninfo);
 
	IF (PQstatus(conn) != CONNECTION_OK)
	{
		fprintf(stderr, "Connection to database failed: %s",
			PQerrorMessage(conn));
 
	}
 
	else {
		printf("Good Done \n");
 
		string INSERT = "CREATE USER '/" + EmailToDB + "/' WITH PASSWORD " + PswdToDb +";";
 
		printf("SQL: %d\n",INSERT);
 
		PGresult *res = PQexec(conn, INSERT.c_str());
 
 
		fprintf(stderr, "UserCreeate: %s",
			PQerrorMessage(conn));
 
		PQfinish(conn);
	}
 
	system("pause");
 
 
 
    RETURN 0;

Я пробовал использовать

				PQexecParams(conn,
					"CREATE USER  $1::char WITH PASSWORD  $2::char ;",
						2,       /* one param */
						NULL,    /* let the backend deduce param type */
						paramValues,
						NULL,    /* don't need param lengths since text */
						NULL,    /* default to all text params */
						0);      /* ask for binary results */

Но также получил ошибку Syntax error at or near $1

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Ошибка появляется даже в случае прямой передачи без переменных

//
#include "targetver.h"
 
#include <stdio.h>
#include <tchar.h>
 
#include <iostream>
#include <string.h>
 
#include "libpq-fe.h"
#include "stdafx.h"
 
USING namespace std;
 
int main()
{
 
    const char *conninfo;
    PGconn     *conn;
 
 
    std::string EmailToDB = "gfdgfdshj@mail.ru";
    std::string PswdToDb = "1234";
 
    char d = char(64); //Тестовый Char для передачи чистый ANCIIне отсылается в запросах
 
    const char *paramValues[2] = { (char *)&EmailToDB, (char *)&PswdToDb };
 
 
    conninfo = "hostaddr = '192.168.0.130' port = '5433' user = 'postgres' password = 'pass' connect_timeout = '2'";
 
    conn = PQconnectdb(conninfo);
    PQsetClientEncoding(conn, "UTF-8");
 
    IF (PQstatus(conn) != CONNECTION_OK)
    {
        fprintf(stderr, "Connection to database failed: %s",
            PQerrorMessage(conn));
        //exit(0);
    }
 
    else {
        PQsetClientEncoding(conn, "UTF8");
        printf("Good Done \n");
 
 
//      string INSERT = "CREATE USER  WITH PASSWORD '123';"; // НЕ РАБОТАЕТ
//      std::string INSERT = "CREATE ROLE uuuuu@u LOGIN NOINHERIT"; // НЕ РАБОТАЕТ
        std::string INSERT = "CREATE ROLE "+ EmailToDB+" LOGIN NOINHERIT"; // НЕ РАБОТАЕТ
        //Везде одна и таже ошибка
 
        PGresult *res = PQexec(conn, INSERT.c_str());
 
 
        fprintf(stderr, "UserCreeate: %s",
            PQerrorMessage(conn));
 
        PQfinish(conn);
    }
 
    system("pause");
 
 
 
    RETURN 0;
}

// string INSERT =

//      string INSERT = "CREATE USER <a href="mailto:gfdshjk@ya.ru">gfdshjk@ya.ru</a> WITH PASSWORD '123';"; // НЕ РАБОТАЕТ

Правильный запрос должен выглядить так:
CREATE USER abrakadabra WITH PASSWORD '123';
без всяких символов левых в логине. Вы вообще пробовали выполнять свои запросы через стандартные средства, например, pgadmin?

Пробовал, все создается без

Пробовал, все создается без проблем.

На одном из форумов подсказали частичный вариант решения

std::string INSERT = "CREATE USER \"" + EmailToDB + "\" WITH PASSWORD \"" + EmailToDB + "\""

В таком случае первая переменная USER обрабатывается без проблем, она дожна быть экранированна, пароль все еще никак передать не могу.
Таже самая ошибка...если без пароля строка типа

std::string INSERT="CREATE ROLE \"" + EmailToDB + "\" LOGIN NOINHERIT";

Строка обрабатывается отлично

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023