2011-02-12 10 views
23

आप php में कैसे जांचेंगे कि एक स्ट्रिंग एक SQL कथन के लिए एक वैध संगत कॉलम नाम है? बस एक स्ट्रिंग मैच।वैध SQL कॉलम नाम के लिए जाँच करें

+1

mysql के लिए इसकी INFORMATION_SCHEMA तालिका क्वेरी –

+0

वैध से आपका क्या मतलब है? क्या आपका मतलब है कि स्ट्रिंग डीबी टेबल में कॉलम के रूप में मौजूद है? या क्या आपका मतलब है कि डेटाबेस इस स्ट्रिंग को कॉलम नाम के रूप में समर्थन देता है? –

+0

@Shakti उत्तरार्द्ध –

उत्तर

36

आखिरकार प्रत्येक स्ट्रिंग एक डबल कॉलम में संलग्न होने के बाद एक वैध कॉलम नाम है (MySQL कॉन्फ़िगरेशन के आधार पर उस नियम का पालन नहीं कर सकता है। यह डिफ़ॉल्ट स्थापना में पहचानकर्ता उद्धरण के रूप में डबल कोट्स का उपयोग नहीं करता है)।

हालांकि यदि आप क्रॉस प्लेटफार्म बनना चाहते हैं (जैसा कि विभिन्न डीबीएमएस टैग सुझाव देते हैं), तो आपको कम से कम आम संप्रदाय की जांच करनी चाहिए।

इस के PostgreSQL manual has a nice definition:

एसक्यूएल पहचानकर्ता और प्रमुख शब्दों एक पत्र से आरंभ होने चाहिए या अंडरस्कोर (_) (a-z, लेकिन यह भी विशेषक चिह्न और गैर-लैटिन पत्र के साथ अक्षर)। पहचानकर्ता या कुंजी शब्द के बाद के वर्ण अक्षर, अंडरस्कोर, अंक (0-9), या डॉलर संकेत ($) हो सकते हैं। SQL मानक के पत्र के अनुसार ध्यान दें कि डॉलर चिह्न पहचानकर्ता में अनुमति नहीं है, इसलिए उनके उपयोग कम पोर्टेबल अनुप्रयोगों

तो तुम एक नियमित अभिव्यक्ति के साथ निम्नलिखित की जाँच करनी चाहिए प्रस्तुत करना हो सकता है:

  • शुरू होता है एक पत्र के साथ
  • केवल अक्षर (पत्र) और अंक और एक अंडरस्कोर

शामिल तो जैसे निम्नलिखित इस कवर करना चाहिए एक रेगुलर एक्सप्रेशन:

^[a-zA-Z_][a-zA-Z0-9_]*$

एसक्यूएल केस संवेदी नहीं है के रूप में (जब तक दोहरे उद्धरण चिह्नों का उपयोग किया जाता) अपर और लोअर केस अक्षरों की अनुमति है।

+0

वह रेगेक्स यूनिकोड वर्णों के लिए काम नहीं करेगा। – Smudge

+2

@Smudge: गैर-उद्धृत पहचानकर्ताओं के लिए यूनिकोड वर्णों की अनुमति नहीं है। और एक बार जब आप उद्धृत पहचानकर्ता का उपयोग करते हैं तो आपको रेगेक्स की आवश्यकता नहीं होती है, क्योंकि कुछ भी अनुमति है जब आप नाम उद्धृत करते हैं। –

+1

@a_horse_with_no_name ठीक है, समझ में आता है। जो मैं वास्तव में सोच रहा था वह यह था कि यह "गैर-लैटिन अक्षरों" और "अक्षरों वाले अक्षरों वाले अक्षरों" का समर्थन नहीं करता है, जो PostgreSQL उद्धरण मान्य के रूप में दावा करता है। आज मैं एक समान रेगेक्स स्ट्रिंग मार रहा था जिसने यूनिकोड समर्थन को भी प्रभावित किया। – Smudge

0

या तो शो कॉलम का उपयोग करें या क्वेरी का वर्णन करें। और परिणाम से मान्य करने के बजाय। अगर मैं एक ही सवाल था,

$string_to_check = 'sample'; 
$valid = false; 
$q = mysql_query("SHOW FIELDS FROM tbl_name"); 
while($row = mysql_fetch_object($q)) { 
    if($row->Field == $string_to_check) { 
    $valid = true; break; 
    } 
} 
if($valid) { 
    echo "Field exists"; 
} 
1

आप MySQL क्वेरी इस प्रकार एक विशेष मेज से खेतों प्राप्त करने के लिए उपयोग कर सकते हैं:

SHOW FIELDS FROM tbl_name 

और फिर कुछ सरल पीएचपी मैं कुछ विशिष्ट चरित्र सूची के लिए विशेष डेटाबेस दस्तावेज़ खोजता हूं और फिर इसे regexp के रूप में कार्यान्वित करता हूं।

लेकिन मुझे ऐसा कोई सवाल कभी नहीं सामना करना पड़ेगा क्योंकि मूल लैटिन वर्ण, संख्याएं और अंडरस्कोर मेरे द्वारा उपयोग किए जाने वाले किसी भी क्षेत्र का नाम देने के लिए पर्याप्त हैं। तो मैं महान पोर्टेबिलिटी और रखरखाव रखता हूं।

-2

:

+0

अच्छा जवाब, सिवाय इसके कि आप इस तरह की अल्फान्यूमेरिक स्ट्रिंग की जांच कैसे करेंगे जिसमें पहला अक्षर कोई संख्या नहीं हो सकता है? –

+1

मैं कभी भी जांच नहीं करूंगा, दोस्त।किसी अज्ञात स्रोत के आधार पर गतिशील रूप से डेटाबेस तालिका बनाने के लिए, ** कम से कम मैं ** कभी भी करूंगा। –

+1

मैं गतिशील रूप से एक टेबल नहीं बना रहा हूं, मैं बस एक स्वतंत्र मॉड्यूल में सुनिश्चित कर रहा हूं कि आंतरिक इनपुट चर कॉलम नाम की तरह दिखता है, आपको पता है, –

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