You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

QT开发SQLite插入数据报错:near "',user'":语法错误求助

问题分析与解决

错误根源

你遇到的SQL语法错误,核心原因是字符串拼接时单引号缺失:
看你写的SQL片段:

values ('"+Name+"',"+Surname+"',"+Access+"','"+Phone+"',...)

Surname和Access变量前都遗漏了单引号,导致生成的SQL语句语法混乱。比如当Name是Alice、Surname是Smith时,这部分会变成:

values ('Alice',Smith',...)

数据库解析到,Smith',时就会触发语法错误。

另外代码还有两处不合理的地方:

  • 重复调用conn.connOpen(),已经判断过连接成功,无需再次调用
  • 先调用qry.prepare(),又在exec()里传入完整SQL语句,属于错误用法(prepare后应调用无参的exec())
  • 直接拼接用户输入到SQL语句,存在严重SQL注入风险,用户输入含单引号的内容会直接破坏SQL结构,甚至被恶意利用。

正确解决方案(推荐参数绑定)

用Qt的SQL参数绑定功能,既避免语法错误,又杜绝SQL注入:

void oviewsettings::on_pushButton_clicked()
{
    QString Name = ui->lineEdit_usermanagement_Name->text();
    QString Surname = ui->lineEdit_usermanagement_Surname->text();
    QString Access = ui->lineEdit_usermanagement_Access->text();
    QString Phone = ui->lineEdit_usermanagement_Phone->text();
    QString Email = ui->lineEdit_usermanagement_Email->text();
    QString Username = ui->lineEdit_usermanagement_Username->text();
    QString Password = ui->lineEdit_usermanagement_Password->text();

    OViewMain conn;
    if(!conn.connOpen()){
        qDebug()<<"Failed to open the database";
        return;
    }

    QSqlQuery qry;
    // 使用占位符:xxx,避免手动字符串拼接
    qry.prepare("INSERT INTO employeeinfo ([Name],[Surname],[Access],[Phone],[Email],[Username],[Password]) "
                "VALUES (:Name, :Surname, :Access, :Phone, :Email, :Username, :Password)");
    // 绑定参数
    qry.bindValue(":Name", Name);
    qry.bindValue(":Surname", Surname);
    qry.bindValue(":Access", Access);
    qry.bindValue(":Phone", Phone);
    qry.bindValue(":Email", Email);
    qry.bindValue(":Username", Username);
    qry.bindValue(":Password", Password);

    if(qry.exec()){
        QMessageBox::information(this, tr("保存成功"), tr("数据已更新保存"));
        conn.connClose();
    } else {
        QMessageBox::critical(this, tr("错误"), qry.lastError().text());
    }
}

关键改进点

  • 使用:参数名作为占位符,通过bindValue绑定变量,彻底避免手动拼接字符串的语法错误
  • 移除重复的数据库连接调用
  • 修正prepare与exec的配合逻辑(prepare后调用无参exec)
  • 将成功提示的QMessageBox::critical替换为information,语义更准确

内容的提问来源于stack exchange,提问作者Pixal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 04:15:42