2009-04-09 13 views
5

में द्विआधारी एसटीडी INSERT के लिए :: स्ट्रिंग मैं द्विआधारी std :: स्ट्रिंग है और मैं ब्लॉब (MySQL) मेरे पास है सरल डेटा स्तर का उपयोग में डालने की जरूरत है। इसलिए, मुझे क्वेरी निष्पादित करने की आवश्यकता है: ExecuteSQL((LPTSTR)strQ)कैसे ब्लॉब

जब मैं इस क्वेरी स्ट्रिंग (strQ) मुझे लगता है मैं इस बाइनरी स्ट्रिंग जोड़ने के बाद स्ट्रिंग के लिए कुछ भी नहीं जोड़ सकते हैं बनाने रहा हूँ - बस तरह यह अगर समाप्त और कुछ भी नहीं जोड़ा जा सकता है। मैं mysql_real_escape_string का उपयोग नहीं करना चाहता क्योंकि मैं इसे केवल MySQL के लिए नहीं रखना चाहता हूं।

किसी कृपया मदद करने के लिए !!!

उत्तर

2

मान लिया जाये कि आप कोड है कि कुछ इस तरह दिखता है:

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

तो फिर तुम कई समस्याएं हैं। वास्तव में, कलाकार काम नहीं करेगा। सी ++, जब भी आप एक डाली आप लगभग निश्चित रूप से जो अपने कोड टूट जाएगा गलत कुछ कर रहे हैं का उपयोग करें। आप) std :: स्ट्रिंग सदस्य समारोह c_str (का उपयोग करते हुए एक अशक्त-समाप्त स्ट्रिंग बनाने की जरूरत:

ExecuteSQL(s.c_str()); 

बहरहाल, यह आपके सभी अपनी समस्याओं को ठीक नहीं कर सकते हैं क्योंकि आप कहते हैं कि आप एक बाइनरी स्ट्रिंग hava। यदि उस स्ट्रिंग में शून्य बाइट होता है, तो आपका SQL स्ट्रिंग के अंत की बजाय उस वर्ण को समाप्त कर देगा। उस स्थिति में आपको शायद अपने मूल्यों को स्पष्ट रूप से बाध्य करने की जांच करनी होगी।

संपादित करें: कैसे एक MySQL बयान के लिए एक पैरामीटर बाध्य करने की जानकारी के लिए, http://dev.mysql.com/doc/refman/5.1/en/mysql-stmt-bind-param.html

+0

(एसटीडी हाँ, (LPCSTR) रों strSQL.c_str() का उपयोग कर बनाई गई है लेकिन पहले हम इस strSQL बनाने की जरूरत :: स्ट्रिंग) की तरह: strSQL = "में mydatabase.mytable (col1, BLOBCol2) मान डालें ('"; strSQL + = strForCol1; strSql + = "', '', और अब हम इस बाइनरी स्ट्रिंग जोड़ने की जरूरत है ... –

+0

मुख्य समस्या एक भागने वर्ण है और मुख्य सवाल यह है कि - हम इसे mysql_real_escape_string का उपयोग किए बिना कर सकते हैं किसी भी उदाहरण एक बहुत मदद हो जाएगा मूल्यों बंधन के बारे में बात -। आपको एक उदाहरण देता कर सकते हैं, कृपया? –

संबंधित मुद्दे