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));/