c++ - 在 QString 中使用引号时出错

标签 c++ qt

我正在尝试从用户那里获取输入(用户名)并在我的 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/

相关文章:

c++ - 使用 android_native_app_glue.c 时可以从 java 调用 native 代码吗

c++ - 尽管返回了引用,但无法链接重载的赋值运算符

c++ - 乘法游戏循环幻灯片问题

c++ - Qt QScrollArea 自动滚动

c++ - QT:拒绝()关闭整个应用程序?为什么?

qt - 获取受drawLine()或QLineF影响的点列表

c++ - C++ 中全局函数中的静态常量

c++ - unique_ptr push_back 和 std::list

c++ - 我不明白为什么这段代码无法打开文件

c++ - Qt:带有 QUdpSocket 的 SSDP 在极少数情况下工作