描述
从的malloc获取的内存中写入一系列字符和 值。这两个函数返回的字符串应由自由释放。如果的malloc无法分配足够的内存来保存生成的字符串,则两种方法都将返回NULL指针。
PB语法
METHOD mprintf (BYVAL strFormat AS STRING, _ OPTIONAL BYVAL prm1 AS DWORD, BYVAL prm2 AS DWORD, _ BYVAL prm3 AS DWORD, BYVAL prm4 AS DWORD, _ BYVAL prm5 AS DWORD, BYVAL prm6 AS DWORD, _ BYVAL prm7 AS DWORD, BYVAL prm8 AS DWORD, _ BYVAL prm9 AS DWORD, BYVAL prm10 AS DWORD, _ BYVAL prm11 AS DWORD, BYVAL prm12 AS DWORD, _ BYVAL prm13 AS DWORD, BYVAL prm14 AS DWORD, _ BYVAL prm15 AS DWORD, BYVAL prm16 AS DWORD _ ) AS LONG |
参数
strFormat
[in]strFormat字符串和后续参数与sqlite3_snprintf一起使用以生成最终的输出字符串。strFormat字符串不能为NULL。
返回值
指向生成的字符串。
备注
sqlite3_mprintf实现了一些对构建SQL语句很有用的其他格式化选项。所有通常的的printf格式选项都适用。另外还有“%q”,“%Q”和“%z”选项。
%q选项的工作方式与%s一样,它代替参数列表中的一个以nul为终止的字符串。但是,%q也会将每个“\\”字符加倍。%q设计用于字符串文字内。通过将每个“\\”字符加倍,它转义该字符并允许将其插入到字符串中。
例如,假设字符串变量szText包含如下文本:
szText = "It's a happy day!"
可以在SQL语句中使用此文本,如下所示:
DIM pszSQL AS ASCIIZ PTR
pszSQL = sqlite3_mprintf("INSERT INTO table VALUES('%q')", szText)
sqlite3_exec(pDb, @pszSQL, BYVAL 0, BYVAL 0, BYVAL 0)
sqlite3_free(pszSQL)
因为使用了%q格式的字符串,所以szText中的'\\'字符被转义,生成的SQL如下所示:
INSERT INTO table1 VALUES('It''s a happy day!')
这是对的。如果我们使用%s而不是%q,则生成的SQL将如下所示:
INSERT INTO table1 VALUES('It's a happy day!');
第二个例子是SQL语法错误。作为一般规则,当将文本插入字符串文字时,您应始终使用%q而不是%s。
%Q选项的工作方式与%q类似,除了在整个字符串的外部添加单引号。另外,如果参数列表中的参数是NULL指针,则%Q替换文本“NULL”(不带单引号)。所以,例如,可以说:
DIM pszSQL AS ASCIIZ PTR
pszzSQL = sqlite3_mprintf("INSERT INTO table VALUES(%Q)", zText)
sqlite3_exec(pDb, @pszSQL, BYVAL 0, BYVAL 0, BYVAL 0)
sqlite3_free(pszSQL)
上面的代码将在zSQL变量中呈现正确的SQL语句,即使zText变量是NULL指针。
“%z”格式化选项的工作方式类似于“%s”,但是除了在字符串被读取并复制到结果之外,在输入字符串上调用sqlite3_free.