sqlite3_mprintf – 我应该总是使用%Q作为格式说明符而不是%s
摘自SQLite对sqlite3_mprintf()API的引用
http://www.sqlite.org/c3ref/mprintf.html “%Q选项的作用类似于%q,除了它还在整个字符串的外部添加单引号.此外,如果参数列表中的参数是NULL指针,%Q将替换文本”NULL“(不带单引号) “. 使用%q时,我们必须小心使用它周围的单引号,例如 char *zText = "It's a happy day!"; char *zSQL = sqlite3_mprintf("INSERT INTO table VALUES('%q')",zText); 总是使用%Q而不是%q似乎更方便,如下所示: char *zSQL = sqlite3_mprintf("INSERT INTO table VALUES(%Q)",zText); 我的问题 – 是否有一个有效的用例,其中’%q’更合适或更有效?或者我可以安全地使用%Q作为所有语句中%s的替代? 解决方法一切都将以安全的方式创建SQL语句,以最大限度地减少SQL注入的可能性.您应该始终优先选择%q而不是%s.
%Q比%q具有更多优势.
这意味着它将添加单引号,并将nul指针呈现为字符串内的字符串文字“NULL”. 正如您所看到的,这取决于您想要做什么.如果你可以添加单引号和“NULL”生成行为,你可以简单地使用%Q(我认为它对SQL语句中的参数值非常有意义).也许有时你不想要这种行为然后你可以回到%q. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |