当前位置:首页 > 数据库 > SQlite

sqlite3入门之sqlite3_mprintf

sqlite3_mprintf

  • sqlite3_mprintf()函数原型:
  • char *sqlite3_mprintf(const char*,...);
  • sqlite3_mprintf()的作用是将结果写入到sqlite3_malloc()获取的内存中,例程返回的字符串应该使用sqlite3_free()进行释放,如果无法申请到足够的内存,则会返回NULL指针;
  • 它同c库函数 sprintf()类似,实现一些额外的格式化。对所有常用的printf()格式化选项都使用。另外还有非常用选项:%q, %Q, %z;
  • %q选项的作用类似于%s,它会替换了参数列表中以空字符结尾的字符串%q,同时他会将单引号字符转义,有助于防止SQL注入攻击;
  • 示例:
  • char * zText =“这是快乐的一天!”;
    char * zSQL = sqlite3_mprintf(“INSERT INTO table VALUES('%q')”,zText);
    sqlite3_exec(db,zSQL,0,0,0);
    sqlite3_free(ZSQL)
  • 因为使用了%q格式字符串,所以zText中的'''字符被转义,生成的SQL如下所示:
  • INSERT INTO table1 VALUES('这是快乐的一天!')
  • 作为一般规则,在将文本插入字符串文字时,应始终使用%q而不是%s。
  • %Q选项的作用类似于%q,除了它还在整个字符串的外部添加单引号。此外,如果参数列表中的参数是NULL指针,则%Q替换文本“NULL”(不带单引号);
  • char * zSQL = sqlite3_mprintf(“INSERT INTO table VALUES(%Q)”,zText);
    sqlite3_exec(db,zSQL,0,0,0);
    sqlite3_free(ZSQL);
  • 即使zText变量是NULL指针,上面的代码也会在zSQL变量中呈现正确的SQL语句。
  • “%z”格式化选项的作用类似于“%s”,但添加了在读取字符串并将其复制到结果中之后,在输入字符串上调用sqlite3_free()

 


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!