博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转】MySql数据库--mysql_real_escape_string()函数
阅读量:5323 次
发布时间:2019-06-14

本文共 1374 字,大约阅读时间需要 4 分钟。

来自:

unsigned long mysql_real_escape_string(MYSQL *mysql, char *to, const char *from, unsigned long length)

注意,mysql必须是有效的开放式连接。之所以需要它是因为,转义功能取决于服务器使用的字符集。

描述

该函数用于创建可在SQL语句中使用的合法SQL字符串。请参见9.1.1节,“字符串”。

按照连接的当前字符集,将“from”中的字符串编码为转义SQL字符串。将结果置于“to”中,并添加1个终结用NULL字节。编码的字符为NUL (ASCII 0)、‘\\n’、‘\\r’、‘\\’、‘'’、‘"’、以及Control-Z(请参见9.1节,“文字值”)。(严格地讲,MySQL仅需要反斜杠和引号字符,用于引用转义查询中的字符串。该函数能引用其他字符,从而使得它们在日志文件中具有更好的可读性)。

“from”指向的字符串必须是长度字节“long”。必须为“to”缓冲区分配至少length*2+1字节。在最坏的情况下,每个字符或许需要使用2个字节进行编码,而且还需要终结Null字节。当mysql_real_escape_string()返回时,“to”的内容是由Null终结的字符串。返回值是编码字符串的长度,不包括终结用Null字符。

如果需要更改连接的字符集,应使用mysql_set_character_set()函数,而不是执行SET NAMES (或SET CHARACTER SET)语句。mysql_set_character_set()的工作方式类似于SET NAMES,但它还能影响mysql_real_escape_string()所使用的字符集,而SET NAMES则不能。

示例:

char query[1000],*end;

 

end = strmov(query,"INSERT INTO test_table values(");

*end++ = '\\'';

end += mysql_real_escape_string(&mysql, end,"What's this",11);

*end++ = '\\'';

*end++ = ',';

*end++ = '\\'';

end += mysql_real_escape_string(&mysql, end,"binary data: \\0\\r\\n",16);

*end++ = '\\'';

*end++ = ')';

 

if (mysql_real_query(&mysql,query,(unsigned int) (end - query)))

{

   fprintf(stderr, "Failed to insert row, Error: %s\\n",

           mysql_error(&mysql));

}

该示例中使用的strmov()函数包含在mysqlclient库中,工作方式与strcpy()类似,但会返回指向第1个参数终结用Null的指针。

返回值

置于“to”中的值的长度,不包括终结用Null字符。

错误

无。

转载于:https://www.cnblogs.com/the-tops/p/7598874.html

你可能感兴趣的文章
[日常]日常学习总结一
查看>>
选秀节目打分
查看>>
mysql字符集校对
查看>>
继承多态
查看>>
第二次作业
查看>>
Btrace 使用小结
查看>>
多线程编程学习笔记——使用并发集合(一)
查看>>
Python 3 简易用户登录系统,输错三次密码锁定账号
查看>>
统计一个数据库中,无记录的表的sql语句
查看>>
【12月21日】A股滚动市盈率PE历史新低排名
查看>>
Alpha阶段第四次Scrum Meeting
查看>>
背包问题的各种求解方法
查看>>
开发人员协会 可能会无法成立
查看>>
python module :shelve
查看>>
OC内存管理
查看>>
学习TensorFlow,TensorBoard可视化网络结构和参数
查看>>
潜谈IT从业人员在传统IT和互联网之间的择业问题(上)-传统乙方形公司
查看>>
axure笔记--变量值在页面之间的传递
查看>>
PHP学习 smarty 的原理
查看>>
node相关--代码共享
查看>>