powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Здравствуйте, подскаите пожалуйста как передать переменную в запрос PQexecParams, с++
3 сообщений из 3, страница 1 из 1
Здравствуйте, подскаите пожалуйста как передать переменную в запрос PQexecParams, с++
    #39350709
lostandleft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, подскажите пожалуйста как передать переменную в запрос PQexecParams или в PQexec;

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Например есть строка запроса, которая создает нового юзера в БД:
string User = "UserNew";
int Pswd = "987";
 
//Создаем нового юзера TasteMe с паролем 123
PGresult *res = PQexec(conn, "CREATE USER TasteMe WITH PASSWORD '123';");
 
// Как создать строку запроса PQexec так, чтобы создался новый пользователь User и пароль Pswd



Как передать переменную не могу понять, пожалуйста поясните, как передать переменные именно в запрос, ну или к примеру как в цикле 10 юзеров создать, взяв данные из некоторого массива. или плохо искал, или же не смог найти.

Я читал про PQexecParams но внятного использования в реальных условиях так и не понял.
Значение параметров передается массивом Char, как в него запихать стринг или инт, для меня к сожалению осталось не понятным, также не понял что такое $1 и как это использовать.

Пожалуйста помогите разобраться.
...
Рейтинг: 0 / 0
Здравствуйте, подскаите пожалуйста как передать переменную в запрос PQexecParams, с++
    #39351134
lostandleft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пробовал такие варианты, оба неудачные, один неудается полностью, другой чатстично рабочий:

1 вариант не получается вообще:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
                        //Задаем параметры
			const char *paramValues[1];
			string User = "oleny@zoo.org";
			string Pswd = "1234";

                        //Вводим в массив
			paramValues[0] = User.c_str;
			paramValues[1] = Pswd.c_str;

                        //Параметры соединения
                        const char *conninfo;
                        //Само соединение
			PGconn     *conn;


			conninfo = "hostaddr = '192.168.0.130' port = '5432' dbname = 'zoo' user = 'postgres' password = 'mypass' connect_timeout = '2'";

                       //Соединяемся
			conn = PQconnectdb(conninfo);

			if (PQstatus(conn) != CONNECTION_OK)
			{
				fprintf(stderr, "Connection to database failed: %s",
					PQerrorMessage(conn));
			}

                        else {
				printf("Good Done Conncted\n");

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Этот вариант даже не компилируется

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

//Этот вариант даже не компилируется
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

                               }




2 Этот вариант работает частично:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
                        //Задаем параметры
			const char *paramValues[1];
			string User = "oleny@zoo.org";
			string Pswd = "1234";

                        //Вводим в массив
			paramValues[0] = User.c_str;
			paramValues[1] = Pswd.c_str;

                        //Параметры соединения
                        const char *conninfo;
                        //Само соединение
			PGconn     *conn;


			conninfo = "hostaddr = '192.168.0.130' port = '5432' dbname = 'zoo' user = 'postgres' password = 'mypass' connect_timeout = '2'";

                       //Соединяемся
			conn = PQconnectdb(conninfo);

			if (PQstatus(conn) != CONNECTION_OK)
			{
				fprintf(stderr, "Connection to database failed: %s",
					PQerrorMessage(conn));
			}

                        else {
				printf("Good Done Conncted\n");

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Этот вариант отрабатывается частично
				string insert = "CREATE USER " + EmailToDB + " WITH PASSWORD " + PswdToDb +";";
				cout << insert << endl;
				PGresult *res = PQexec(conn, insert.c_str());


//Этот вариант отрабатывается частично, не создаются символы 12345789 и прочие @#$%^&...
//Стандартные буквы a-Z нормально принимаются и пользователь в БД создается, но если встречаются
//иные символы PG возвращает ошибку типа:

// Syntax error at or near @ к примеру, или иной символ

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
...
Рейтинг: 0 / 0
Здравствуйте, подскаите пожалуйста как передать переменную в запрос PQexecParams, с++
    #39351207
lostandleft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
переделал немного, все равно ошибка при обращение к базе данных:
3 вариант
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
                       //Задаем параметры
//            const char *paramValues[1];
            string User = "oleny@zoo.org";
            string Pswd = "1234";
 
 /*                       //Вводим в массив
            paramValues[0] = User.c_str;
            paramValues[1] = Pswd.c_str;
 */
       //Задаю переменные массива сразу в момент создания оного     
           const char *paramValues[2] = { (char *)&User, (char *)&Pswd };
 
                        //Параметры соединения
                        const char *conninfo;
                        //Само соединение
            PGconn     *conn;
 
 
            conninfo = "hostaddr = '192.168.0.130' port = '5432' dbname = 'zoo' user = 'postgres' password = 'mypass' connect_timeout = '2'";
 
                       //Соединяемся
            conn = PQconnectdb(conninfo);
 
            if (PQstatus(conn) != CONNECTION_OK)
            {
                fprintf(stderr, "Connection to database failed: %s",
                    PQerrorMessage(conn));
            }
 
                        else {
                printf("Good Done Conncted\n");
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Компилируется
 
                                               PQexecParams(conn,
                        "CREATE USER $1 WITH PASSWORD $2",
                        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 */
                        1);      /* ask for binary results */
 
//компилируется  также сплевывает ошибку Syntax error at or near $1
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
                               }
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Здравствуйте, подскаите пожалуйста как передать переменную в запрос PQexecParams, с++
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]