mysql_real_escape_string()--mysql數據庫

1. 函數原型

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

注意:
使用時,mysql必須是有效的開放式連接。
因爲,轉義功能取決於服務器使用的字符集。

2. 描述

該函數用於創建可在SQL語句中使用的合法SQL字符串。

按照連接的當前字符集,將“from”中的字符串編碼爲轉義SQL字符串。
將結果置於“to”中,並添加1個終結用NULL字節。
編碼的字符爲NUL (ASCII 0)、‘\n’、‘\r’、‘\’、‘’’、‘”’、以及Control-Z。
(嚴格地講,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則不能。

3. 示例

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的指針。

參考來源:

http://www.cppblog.com/woaidongmao/archive/2009/08/13/93154.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章