2009-04-09 17 views
5

Tengo binary std :: string y necesito insertarlo en el BLOB (MySQL) usando la capa de datos simple que tengo. Entonces, necesito ejecutar la consulta: ExecuteSQL((LPTSTR)strQ).Cómo INSERTAR binary std :: string en BLOB

Cuando estoy creando esta cadena de consulta (strQ) no puedo agregar nada a la cadena después de agregar esta cadena binaria; simplemente es amable si se termina y no se puede agregar nada. No quiero usar mysql_real_escape_string porque quiero mantenerlo no solo para MySQL.

Cualquiera a AYUDAR POR FAVOR !!!

Respuesta

2

Asumiendo que tiene código que se ve algo como esto:

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

entonces usted tiene varios problemas. Forstly, el elenco no funcionará. En C++, cada vez que usa un reparto, seguramente hará algo incorrecto que romperá su código. Es necesario crear una cadena terminada en nulo con el std :: string función miembro c_str():

ExecuteSQL(s.c_str()); 

Sin embargo, esto no puede solucionar todos sus problemas porque sus dices que hava una cadena binaria. Si esa cadena contiene el byte cero, su SQL terminará en ese carácter en lugar de en el final de la cadena. En ese caso, es probable que deba investigar vinculando sus valores de forma explícita.

Editar: Para más detalles sobre cómo enlazar un parámetro para una declaración de MySQL, consulte http://dev.mysql.com/doc/refman/5.1/en/mysql-stmt-bind-param.html

+0

Sí, (LPCSTR) s se crea utilizando strSQL.c_str() pero primero necesitamos para crear esta strSQL (std :: string) como: strSQL = "INSERT INTO mydatabase.mytable (col1, BLOBCol2) VALUES ('"; strSQL + = strForCol1; strSql + = "', '"; y ahora tenemos que agregar esta cadena binaria ... –

+0

El problema principal es un escape de personajes y la pregunta principal es: ¿podemos hacerlo sin usar mysql_real_escape_string? Cualquier ejemplo será de gran ayuda. Hablando de valores vinculantes, ¿puede dar un ejemplo, por favor? –