Не применяются параметры при вызове query.prepare()

 q.prepare("call new_employee(:new_login,"
                  ":first_name,"
                  ":last_name,"
                  ":phone_number,"
                  ":email,"
                  "'2',"
                  ":hashed_password);");

    q.bindValue(":new_login", login);
    q.bindValue(":first_name", firstName);
    q.bindValue(":last_name", secondName);
    q.bindValue(":phone_number", phone);
    q.bindValue(":email", mail);
    q.bindValue(":hashed_password", hashing(password));

    q.exec();

new_employee - процедура по созданию нового юзера. Процедура принимает в кач-ве параметров , 6 varchar-ов и один integer. Все параметры login, first_name ... берутся из lineEdit из ui(методом text()), соответственно имеют тип qstring.

query.lastQuery() показывается примерное следующее

"CALL new_employee(?,?,?,?,?,'2',?);"
либо 
"call new_employee(:new_login,:first_name,:last_name,:phone_number,:email,'2',:hashed_password);"

в зависимости от того какой синтаксис выбираю для написания запроса.


Ответы (1 шт):

Автор решения: Chingiz

окей, не юзайте qstring как аргументы в prepare, так же не юзайте такой синтаксис

query.prepare(QString("sql-запрос").arg(login).arg(firstName).arg(secondName));

так как вы форматируете всю строку, идущую в виде запроса в бд, в непонятный для нее qstring, не со всеми бд так, но для postgres это верно, либо же это просто в моем случае так произошло.

  • не уверен в информации, но к другому выводу я прийти не смог
→ Ссылка