2011-03-31 8 views
5

के साथ SQLite डेटाबेस में डेटा को सुरक्षित रूप से सम्मिलित करना मैं उपयोगकर्ता द्वारा प्रदत्त पाठ के आधार पर SQLite डेटाबेस में एक तालिका बनाने का प्रयास कर रहा हूं। सब कुछ ठीक से काम कर रहा था, सिवाय इसके कि जब मैंने पाठ के अंदर एक एस्ट्रोफ़े जोड़ने की कोशिश की (जो कि नया टेबल नाम था)। अनुसंधान के बाद, मैं निर्धारित किया है कि मैं क्या कर रहा था सबसे अच्छा अभ्यास के रूप में इंजेक्शन के लिए असुरक्षित है नहीं है:एस्ट्रोफ़े

const char *sqlStr = [[NSString stringWithFormat:@"CREATE Table '%@' ('Name' 'char(50)','ID' 'integer')",theString]UTF8String]; 

तो मैं अक्षर लोप तालिका नाम में शामिल होने की अनुमति के लिए एक रास्ता खोजने के लिए और सुरक्षित रूप से डालने कोशिश कर रहा हूँ डेटाबेस में मूल्य। मैंने बाध्यकारी मानों के बारे में पढ़ा है, लेकिन क्या यह 'टेबल बनाएं' कथन के साथ संभव है? या केवल तभी जब आप पहले से मौजूद तालिका में डेटा डालते हैं?

आपकी मदद के लिए धन्यवाद।

+0

मैं उपयोगकर्ता या स्तंभों के नामकरण के कुछ अन्य गतिशील रास्ते की इजाजत दी की सिफारिश नहीं होगा। अगर कुछ कॉलम कस्टम 1 का नाम है। – Joe

+0

हाय जो, मैं उपयोगकर्ता को डेटाबेस में टेबल नाम बनाने देना चाहता हूं, कॉलम नहीं, वे बदलने योग्य नहीं होंगे। मैं apostrophes के साथ काम करते समय ऐसा करने का सबसे अच्छा तरीका नहीं जानता। – Ryan

+1

यदि आप [एफएमडीबी] (http://github.com/ccgus/FMDB) का उपयोग करते हैं, तो यह आपके SQL को निष्पादित करने से पहले आपके लिए आवश्यक सभी भागने को संभालेगा (बशर्ते आप प्रतिस्थापन के लिए अपने एपीआई का उपयोग करें)। मैं * अत्यधिक * अनुशंसा करता हूं कि आप इसे देखें। –

उत्तर

10

documentation से:

एक स्ट्रिंग निरंतर सिंगल कोट्स (') में स्ट्रिंग बंद करके ही बना है। स्ट्रिंग के भीतर एक सिंगल कोट को पंक्ति में दो सिंगल कोट्स डालकर एन्कोड किया जा सकता है - जैसे पास्कल में।

इस प्रकार:

[theString stringByReplacingOccurrencesOfString:@"'" withString:@"''"]; 
+0

मैंने मूल्यों को सम्मिलित करने के लिए इसका उपयोग किया है, लेकिन जब मैंने इसे डीबी से पुनर्प्राप्त करने का प्रयास किया तो यह मुझे खाली पंक्ति देता है। जैसे '' चुनें * तालिका से जहां नाम = 'टॉम' '' ' –

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