Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

इनपुट टेक्स्ट और विशेष वर्ण और MySQL

आपके पास डेटाबेस में टेक्स्ट को रॉ के रूप में रखने का सही विचार है। सुनिश्चित नहीं है कि सभी HTML निकाय सामग्री किस लिए है; आपको डेटाबेस प्रविष्टि के लिए ऐसा करने की आवश्यकता नहीं है।

[एकमात्र कारण मैं सोच सकता हूं कि आप डेटाबेस के लिए आने वाले इनपुट को इकाई-डीकोड करने का प्रयास क्यों कर सकते हैं यदि आप पाते हैं कि आपको चरित्र संदर्भ मिल रहे हैं जैसे Š आपके फॉर्म सबमिशन इनपुट में। यदि ऐसा हो रहा है, तो ऐसा इसलिए है क्योंकि उपयोगकर्ता ऐसे वर्णों को इनपुट कर रहा है जो फ़ॉर्म के साथ पृष्ठ द्वारा उपयोग किए गए एन्कोडिंग में मौजूद नहीं हैं। एन्कोडिंग का यह रूप पूरी तरह से फर्जी है क्योंकि तब आप Š . टाइप करने वाले उपयोगकर्ता के बीच अंतर नहीं कर सकते और शाब्दिक रूप से Š . टाइप करना ! आपको अपने सभी पृष्ठों और सामग्री के लिए UTF-8 एन्कोडिंग का उपयोग करके इससे बचना चाहिए, क्योंकि हर संभव वर्ण इस एन्कोडिंग में फिट बैठता है।]

आपकी स्क्रिप्ट में स्ट्रिंग्स हमेशा बिना किसी पलायन के कच्चे टेक्स्ट होने चाहिए। इसका मतलब है कि जब तक आप उन्हें एक ऐसे संदर्भ में आउटपुट नहीं करते हैं, जो सादा-पाठ नहीं है, तब तक आप उनके साथ कुछ भी नहीं करते हैं। तो उन्हें SQL स्ट्रिंग में डालने के लिए:

$category= trim($_POST['category']);
mysql_query("SELECT * FROM things WHERE category='".mysql_real_escape_string($category)."'");

(या मैन्युअल रूप से बचने से बचने के लिए पैरामीटरयुक्त प्रश्नों का उपयोग करें।) HTML में सामग्री डालते समय:

<input type="text" name="category" value="<?php echo htmlspecialchars($category); ?>" />

(आप function h($s) { echo htmlspecialchars($s, ENT_QUOTES); } जैसे छोटे नाम के साथ हेल्पर फंक्शन को परिभाषित कर सकते हैं यदि आप टेम्प्लेट में टाइपिंग की मात्रा को कम करना चाहते हैं।)

और बस यही सब है। आपको डेटाबेस से निकलने वाले स्ट्रिंग्स को संसाधित करने की आवश्यकता नहीं है, क्योंकि वे पहले से ही कच्चे तार हैं। आपको किसी भी एप्लिकेशन-विशिष्ट फ़ील्ड सत्यापन के अलावा इनपुट स्ट्रिंग्स (*) को संसाधित करने की आवश्यकता नहीं है, जिसे आप करना चाहते हैं।

*:ठीक है, सिवाय अगर magic_quotes_gpc चालू है, इस स्थिति में आपको या तो stripslashes() . की आवश्यकता होगी सब कुछ जो प्राप्त/पोस्ट/कुकी, या, मेरे पसंदीदा विकल्प से आता है, बस तुरंत विफल हो जाता है:

if (get_magic_quotes_gpc())
    die(
        'Magic quotes are turned on. They are utterly bogus and no-one should use them. '.
        'Turn them off, you idiot, or I refuse to run. So there!'
    );


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. php डेटाबेस छवि शो समस्या

  2. MySQL में SQLServer फ़ंक्शन SCOPE_IDENTITY () के बराबर?

  3. एंड्रॉइड ऐप में लॉग इन पेज कैसे बनाएं?

  4. अधिकतम लंबाई के साथ हाइबरनेट में कॉलम की लंबाई कैसे सेट करें?

  5. वाइड वर्चर फील्ड कारण अनुरोधित रूपांतरण समर्थित नहीं है MySQL लिंक्ड सर्वर के साथ ओपनक्वेरी का उपयोग करने में त्रुटि