2011-11-21 7 views
5

प्रिय सभी।अंतराल और real_escape_string का उपयोग जब पूर्णांक sanitizing

मैं mysql डेटाबेस के कुछ तालिकाओं में पूर्णांक पीके का उपयोग कर रहा हूं। PHP स्क्रिप्ट से इनपुट से पहले, मैं कुछ sanitizing कर रहा हूँ, जिसमें अंतराल ($ आईडी) और $ mysqli-> real_escape_string() शामिल है।

प्रश्नों काफी सरल

insert into `tblproducts`(`supplier_id`,`description`) values('$supplier_id','$description') 

इस उदाहरण में कर रहे हैं, $ वर्णन करते हुए $ केवल intval() 'एड किया जा रहा supplier_id, real_escape_string() के माध्यम से चला जाता है।

यदि कोई परिस्थिति है, तो मुझे केवल जिज्ञासा है, जब मुझे अंतराल और real_escape_string को पूर्णांक में लागू करने की आवश्यकता है, तो मैं डीबी में डाल रहा हूं? तो मूल रूप से मुझे वास्तव में उपयोग करने की ज़रूरत है?

$supplier_id = intval($mysqli->real_escape_string($supplier_id)); 

धन्यवाद।

+3

यदि आप तैयार बयानों का उपयोग करना चाहते हैं तो डेटा प्रकारों को स्वच्छ करने और सुनिश्चित करने के साथ सभी अपर्याप्त प्रयास अनावश्यक होंगे। बहुत आसान है। – mario

+0

आपकी टिप्पणी के लिए धन्यवाद। मूल रूप से डीबी कक्षाओं को पूर्व बयानों के बिना विकसित किया गया था, इसलिए मुझे अंतर्निहित कक्षाओं को दोबारा करने की जरूरत है और एक ही समय में कार्यरत बुनियादी ढांचे को तोड़ना नहीं है। तो मैं आपके द्वारा उल्लिखित कारणों के लिए पूर्व बयानों पर स्विच करने पर विचार कर रहा हूं, लेकिन सीधे नहीं :) – paulus

+0

इसके अलावा, जहां तक ​​मुझे पता है, प्री कथन, सबसे अधिक उपयोगी हैं जब सामूहिक प्रश्नों की बात आती है, जो आमतौर पर मामला नहीं है मेरी स्थिति। इसलिए मूल रूप से प्री कथन में स्विच करने से कोड की मात्रा बढ़ जाती है (अच्छी तरह से कमी नहीं होती है)> इसलिए कम पठनीयता और प्रदर्शन भी प्रश्न में है। मेरी राय के लिए, तैयारी कथन => बाइंड => निष्पादित करने के बजाय कभी-कभी अंतराल और real_escape_strings करना तेज़ होगा।जब तक कि मैं किसी प्रकार का सुपर-मेटा-डीबी-क्लास विकसित नहीं करूंगा जो सभी प्रश्नों का ख्याल रखेगा, जो मेरे मामले में स्क्रैच से कोड लिखने का मतलब होगा। – paulus

उत्तर

9

intvalreal_escape_string से real_escape_string से तेज़ तरीका डेटाबेस से कनेक्ट होना और वर्णमाला/संयोजन के आधार पर भागना है। स्वच्छ

1

आप एक चर पर intval चलाने के बाद real_escape_string $ mysqli-> उपयोग करने के लिए की जरूरत नहीं है दोगुना करने के लिए

$val = (int)$val; 

इसलिए कोई जरूरत नहीं:

आप भी तरह int डाल सकता। अंतराल() 0 लौटाएगा यदि यह पूर्णांक नहीं है और यदि यह एक पूर्णांक है तो यह मान वापस कर देगा।

$x = "50 O'Brien Family Members at a Bar"; 

intval() का उपयोग करके आप दे देंगे:

Example: 
$variable = '5'; 
$variable2 = 'c5b'; 
if(intval($variable)) echo 'It is a variable'; # intval will return 5 or true 
if(intval($variable2)) echo 'It is a variable'; # intval will return 0 or false since it has a letter 
वहाँ

कुछ मामलों में जहां intval स्ट्रिंग में पहले पूर्णांक वापस आ जाएगी यह 5 ब 'पर सेट है, तो

+1

अंतराल ($ variable2) 5 0 – Derek

+0

वापस आ जाएगा मैंने जवाब दिया और जवाब को अद्यतन किया और इसे नीचे जोड़ा क्योंकि मुझे कभी-कभी ऐसा होता है 0 और अन्य बार 5 –

+0

वापस आते हैं आप सही हैं! – Derek

0

कुछ इस तरह विचार करें है

50 

और "realcapes_string" जहाँ आप वास्तव में एक प्रश्न में एक स्ट्रिंग मान का उपयोग करना चाहते हैं कहां

50 O\'Brien Family Members at a Bar 

real_escape_ STRING() केवल इस्तेमाल किया जाना चाहिए। बाकी सब कुछ के लिए, एक और उपयुक्त उपकरण का उपयोग करें।

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