Qt中操作数据库时,给LIKE子句绑定命名占位符的值

本文介绍了在Qt中为提高SQL安全性,如何使用命名占位符来绑定LIKE子句的值,以防止SQL注入。通过示例代码展示了具体操作过程,特别指出在使用SQLite数据库时,应将命名占位符转换为位置占位符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Qt中操作数据库时,为提高安全性,防止SQL注入,可以使用命名占位符和位置占位符。

本文以命名占位符为例,演示如何给LIKE子句中的占位符绑定值,代码如下:

/*从person表中按工号查找最多limitCnt条人员信息,用于"识别新卡号"界面使用
**
**no :需要查询的工号
**rslt :查询结果
**limitCnt :最多返回的结果条数
**
**返回值 :成功后返回true;否则返回false.返回false时,rslt不可用.
**
**注意 :如果没有查询到符合条件的记录,则也认为查询是成功的.
*/
bool selPersonAvailable(const QString &no,QVector<QString> &rslt,const int limitCnt){
	static const QString funcErrMsg="从person表中按工号查找最多limitCnt条人员信息,用于\"识别新卡号\"界面使用时,%1失败.";

	QString sql="select pnam,pno,rno from person where pno like :pno and state<>'d' limit :limitCnt ";//注意,like的百分号(%)不直接写到SQL字符串中
	bool ok;

	//_log(QString("no=%1,limitCnt=%2").arg(no).arg(limitCnt));

	QSqlDatabase db=QSqlDatabase::database(DB_CONN_NAME);
	QSqlQuery query(db);

	query.prepare(sql);
	query.bindValue(":pno",QString("%%1%").arg(no));//添加百分号(%)
	query.bindValue(":limitCnt",limitCnt);

	if(query.exec()){
		while(query.next()){
			rslt.append(query.value(0).toString()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值