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

    错误

    无。

  • 相关阅读:
    WINRAR发现溢出漏洞 3.6以下的版本全遭殃!
    Linux桌面即将奢华:KDE 4.1 Beta 1颁发
    AMD Catalyst 8.5 For Linux
    解说MySQL数据库的数据典范和建库战略
    FVWMCrystal:美观且易用的桌面环境
    Linux下建立ISO映像,运用ISO映像,卸载ISO映像
    KDiff3:文件及目次比拟/兼并东西
    Ubuntu 8.04装置nVidia新版显现驱动
    在linux浏览CHM文件
    SCN不差别将会招致ORA00600 2662错误
  • 原文地址:https://www.cnblogs.com/vanishfan/p/4618698.html
Copyright © 2011-2022 走看看