我正在尝试从用户那里获取输入(用户名)并在我的 sqlite 中搜索它以找到它的恢复密码。
QString username = QInputDialog::getText(this, "Password Recovery", "please enter ur Username here:", QLineEdit::Normal,"myUsername", Q_NULLPTR, Qt::WindowFlags(), Qt::ImhNone);
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("/home/arian_press/Qt5.7.0/Projects/APQt_chat/apt.db");
if (db.open())
{
QSqlQuery query;
QString qstr="SELECT username,password,support_email FROM users WHERE username=\""+username+"\";" ;
}
if (query.exec(qstr))
{
QString password=query.value(1).toString();
QString pass = "ur password is:" + password;
Smtp *newMail = new Smtp("arian.press2015@gmail.com",query.value(2).toString()," Your Password",pass);
delete newMail;
QMessageBox messageBox;
messageBox.critical(0,"Error","ur credentials are wrong!");
messageBox.setFixedSize(500,200);
}
else
{
qDebug() << query.lastError().text();
}
db.close();
}
else
{
qDebug() << "Failed to connect to database.";
}
但是当我运行该程序时,它不会返回任何内容,而当我在终端中打开 SQLite 文件时,我可以获得结果。
**更新: 你不是我说的那个意思。问题是我不能在上面的代码中使用\"因为对于查询我需要:SELECT username,password,support_email FROM users WHERE username="myusername"
但是当我使用上面的代码时,它会查询 SELECT username,password,support_email FROM users WHERE username=\"myusername\" 所以我得不到任何结果。那么现在我怎样才能在 QString 中加上引号呢?
最佳答案
切勿将用户输入与您的查询连接起来:这会使您容易受到 SQL injection 的攻击.使用准备好的语句!
此外,您必须使用单引号'
。
QSqlQuery query;
query.prepare("SELECT username,password,support_email "
"FROM users "
"WHERE username=':username';");
query.bindValue(":username", username);
您的 QString qstr = ...
之后的 应该被删除。
关于c++ - 在 QString 中使用引号时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49814659/