2009-04-09 4 views
5

私はバイナリstd :: stringを持っています。私はそれをBLOB(MySQL)に挿入する必要があります。だから、クエリ:ExecuteSQL((LPTSTR)strQ)を実行する必要があります。BLOBにバイナリstd :: stringを挿入する方法

このクエリ文字列(strQ)を作成しているとき、このバイナリ文字列を追加した後は文字列に何も追加できません。終了した場合は何も追加できません。 mysql_real_escape_stringを使用したくないのは、私がMySQLだけでなくそれを保持したいからです。

誰かが助けてください!

std::string s = ...  // populate string somehow 
ExecuteSQL((LPCSTR) s); 

その後、あなたはいくつかの問題を持っている:あなたはこのようになりますコードを持っていると仮定すると

答えて

2

。 Forstly、キャストは動作しません。 C++では、いつでもキャストを使用すると、あなたのコードを壊してしまうかもしれない間違いがあります。あなたは)のstd ::文字列メンバ関数c_strを(使用して、NULLで終わる文字列を作成する必要があります:あなたは、バイナリ文字列をHAVA言うので

ExecuteSQL(s.c_str()); 

はしかし、これはすべてのあなたの問題を解決しないことがあります。その文字列にゼロバイトが含まれていると、SQLは文字列の終わりではなくその文字で終了します。その場合は、おそらく値を明示的にバインドすることを調べる必要があります。

編集:MySQLのステートメントにパラメータをバインドする方法の詳細については、はい、(LPCSTR)sはstrSQL.c_strを(使用して作成されhttp://dev.mysql.com/doc/refman/5.1/en/mysql-stmt-bind-param.html

+0

を参照)が、最初に我々はこのます。strSQL(STDを作成する必要があります:: string)like:strSQL = "INSERT INTO mydatabase.mytable(col1、BLOBCol2)VALUES( '"; strSQL + = strForCol1; strSql + = "'、 '";そしてこのバイナリ文字列を追加する必要があります。 –

+0

主な問題はエスケープ文字であり、主な質問は - mysql_real_escape_stringを使用せずに行うことができますか?どの例も大きな助けになります。バインディング値について - 例を挙げてください。 –

関連する問題