【问题标题】:error in using quotation in QString在 QString 中使用引号时出错
【发布时间】:2018-04-19 19:36:20
【问题描述】:

我正在尝试从用户那里获取一个输入(用户名)并在我的 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 中带上引号?

【问题讨论】:

  • 抱歉,这段代码应该做什么?你打开一个数据库,然后你建立一个字符串?如果您不向数据库发送查询,您将无法获得任何信息。
  • 如果你从来没有return任何东西,你就不能“返回任何东西”......不要发布不完整的代码片段,对应该发生的事情有模糊的愿望,没有任何证据表明你试图使其发生!发布一个完整的、可编译的示例,并解释用户应该如何测试它。在准备的过程中,您可能会意识到自己错过了什么。

标签: c++ qt


【解决方案1】:

切勿将用户输入与您的查询连接:这会使您容易受到SQL injection 的攻击。使用准备好的语句

此外,您必须使用单引号'

QSqlQuery query;
query.prepare("SELECT username,password,support_email "
              "FROM users "
              "WHERE username=':username';");
query.bindValue(":username", username);

您的QString qstr = ... 后面的} 应该被删除。

【讨论】:

    【解决方案2】:

    SQL 对字符串使用单引号。试试:

    QString qstr="SELECT username,password,support_email FROM users WHERE username='"+username+"';";
    

    还有一种更优雅的方式:

    query.prepare("SELECT username,password,support_email FROM users WHERE username = :username;");
    query.bindValue(":username", username);
    query.exec();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-19
      • 1970-01-01
      • 2018-09-14
      • 1970-01-01
      • 2016-05-28
      • 1970-01-01
      相关资源
      最近更新 更多