unsigned long mysql_real_escape_string(MYSQL *mysql,
char *to, const char *from, unsigned long length)
説明
この関数は、SQL ステートメントで使用できる正当な SQL 文字列を作成するために使用します。 See 項6.1.1.1. 「文字列」。
from
に指定した文字列が、エスケープされた SQL
文字列にエンコードされます。この際、接続の現在のキャラクタセットが考慮されます。エンコードした結果は
to
に設定され、末尾には文字列の終わりを示すヌルバイトが付加されます。エンコードされる文字は、NUL
(ASCII
0)、'\n
'、'\r
'、‘\
’、‘'
’、‘"
’、および
Ctrl-Z キー(see
項6.1.1. 「リテラル:文字列と数値の記述方法」)です(厳密に言えば、MySQL
でエスケープする必要があるのはクエリ内で文字列を引用するためのバックスラッシュおよび引用符だけですが、この関数ではログファイルを読みやすくするために他の文字もエスケープします)。
from
で指定する文字列の長さは
length
バイトである必要があります。to
バッファには、少なくとも
length*2+1
バイトのメモリを割り当てる必要があります(最悪の場合、1
文字エンコードするのに 2
バイトが必要な可能性があり、さらに文字列の終わりを示すヌルバイトを格納する必要があります)。mysql_real_escape_string()
が復帰したとき、to
にはヌル終端文字列が格納されています。戻り値はエンコード後の文字列の長さです。ただし、文字列の終わりを示すヌルバイトは含みません。
例
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
つ目のパラメータで指定された文字列の終わりを示すヌルバイトへのポインタを返します。
戻り値
to
に設定された値の長さ。ただし、文字列の終わりを示すヌルバイトは含みません。
エラー
ありません。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.