zoukankan      html  css  js  c++  java
  • 【转】MySql数据库--mysql_real_escape_string()函数

    MySql数据库--mysql_real_escape_string()函数

    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字符。

    错误

    无。

  • 相关阅读:
    【转】编译原理4种文法类型
    Gamma校正与线性空间
    【翻译】CEDEC2014 CAPCOM 照相机正确的照片真实的制作工作流
    【翻译】CEDEC2013 BANDAI NAMCO 了解游戏格斗动画中的身体运动结构和原理
    UnrealEngine4 PBR Shading Model 概述
    【翻译】Kinect v2程序设计(C++-) AudioBeam篇
    【翻译】Kinect Studio是? 三月 SDK Update的新机能
    【翻译】Kinect v2程序设计(C++) Body 篇
    【翻译】Kinect v2程序设计(C++) BodyIndex篇
    【翻译】Kinect v2程序设计(C++) Depth编
  • 原文地址:https://www.cnblogs.com/vanishfan/p/4618698.html
Copyright © 2011-2022 走看看