2009-04-09 18 views
5

Tôi có chuỗi nhị phân std :: string và tôi cần chèn nó vào BLOB (MySQL) bằng cách sử dụng lớp dữ liệu đơn giản mà tôi có. Vì vậy, tôi cần thực hiện truy vấn: ExecuteSQL((LPTSTR)strQ).Làm thế nào để INSERT nhị phân std :: string vào BLOB

Khi tôi tạo chuỗi truy vấn này (strQ) Tôi không thể thêm bất kỳ thứ gì vào chuỗi sau khi tôi thêm chuỗi nhị phân này - nó chỉ loại nếu chấm dứt và không có gì có thể được thêm vào. Tôi không muốn sử dụng mysql_real_escape_string vì tôi không muốn nó không chỉ cho MySQL.

Bất kỳ ai để GIÚP XIN !!!

Trả lời

2

Giả sử bạn có mã số đó trông giống như sau:

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

Sau đó, bạn có một số vấn đề. Forstly, diễn viên sẽ không hoạt động. Trong C++, bất cứ khi nào bạn sử dụng một dàn diễn viên, bạn gần như chắc chắn làm điều gì đó không chính xác sẽ phá vỡ mã của bạn. Bạn cần phải tạo một chuỗi null-chấm dứt sử dụng std :: string hàm thành viên c_str():

ExecuteSQL(s.c_str()); 

Tuy nhiên, điều này không thể sửa chữa tất cả các vấn đề của bạn vì bạn nói rằng bạn HAVA một chuỗi nhị phân. Nếu chuỗi đó chứa byte không, thì SQL của bạn sẽ kết thúc tại ký tự đó thay vì kết thúc chuỗi. Trong trường hợp đó bạn có thể cần phải điều tra ràng buộc các giá trị của bạn một cách rõ ràng.

Edit: Để biết chi tiết về cách để ràng buộc một tham số để một tuyên bố MySQL, xem http://dev.mysql.com/doc/refman/5.1/en/mysql-stmt-bind-param.html

+0

Vâng, (LPCSTR) s được tạo ra sử dụng strSQL.c_str() nhưng trước tiên chúng ta cần tạo strSQL này (std :: string) giống như: strSQL = "INSERT INTO mydatabase.mytable (col1, BLOBCol2) VALUES ('"; strSQL + = strForCol1; strSql + = "', '"; và bây giờ chúng ta cần phải thêm chuỗi nhị phân này ... –

+0

Vấn đề chính là một nhân vật trốn thoát và câu hỏi chính là - chúng ta có thể làm điều đó mà không sử dụng mysql_real_escape_string không? Bất kỳ ví dụ nào cũng sẽ là một trợ giúp tuyệt vời. –

Các vấn đề liên quan