unsigned long mysql_real_escape_string(MYSQL *mysql, char *to, const char *from, unsigned long length)
注意,mysql必須是有效的開(kāi)放式連接。之所以需要它是因?yàn)?,轉(zhuǎn)義功能取決于服務(wù)器使用的字符集。
描述
該函數(shù)用于創(chuàng)建可在SQL語(yǔ)句中使用的合法SQL字符串。請(qǐng)參見(jiàn)9.1.1節(jié),“字符串”。
按照連接的當(dāng)前字符集,將“from”中的字符串編碼為轉(zhuǎn)義SQL字符串。將結(jié)果置于“to”中,并添加1個(gè)終結(jié)用NULL字節(jié)。編碼的字符為NUL (ASCII 0)、‘\\n’、‘\\r’、‘\\’、‘'’、‘"’、以及Control-Z(請(qǐng)參見(jiàn)9.1節(jié),“文字值”)。(嚴(yán)格地講,MySQL僅需要反斜杠和引號(hào)字符,用于引用轉(zhuǎn)義查詢中的字符串。該函數(shù)能引用其他字符,從而使得它們?cè)谌罩疚募芯哂懈玫目勺x性)。
“from”指向的字符串必須是長(zhǎng)度字節(jié)“l(fā)ong”。必須為“to”緩沖區(qū)分配至少length*2+1字節(jié)。在最壞的情況下,每個(gè)字符或許需要使用2個(gè)字節(jié)進(jìn)行編碼,而且還需要終結(jié)Null字節(jié)。當(dāng)mysql_real_escape_string()返回時(shí),“to”的內(nèi)容是由Null終結(jié)的字符串。返回值是編碼字符串的長(zhǎng)度,不包括終結(jié)用Null字符。
如果需要更改連接的字符集,應(yīng)使用mysql_set_character_set()函數(shù),而不是執(zhí)行SET NAMES (或SET CHARACTER SET)語(yǔ)句。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()函數(shù)包含在mysqlclient庫(kù)中,工作方式與strcpy()類似,但會(huì)返回指向第1個(gè)參數(shù)終結(jié)用Null的指針。
返回值
置于“to”中的值的長(zhǎng)度,不包括終結(jié)用Null字符。
錯(cuò)誤
無(wú)。