मैं PHP से MySQL सामान करने के लिए मानक mysql_connect(), mysql_query(), आदि कथन का उपयोग करता था। हाल ही में मैं अद्भुत एमडीबी 2 कक्षा का उपयोग करने के लिए स्विच कर रहा हूं। इसके साथ में, मैं तैयार बयान का उपयोग कर रहा हूं, इसलिए मुझे अपने इनपुट और एसक्यूएल इंजेक्शन हमलों से बचने की चिंता करने की ज़रूरत नहीं है।MySQL में शून्य-शून्य कॉलम में खाली स्ट्रिंग?
हालांकि, एक समस्या है जिसमें मैं दौड़ रहा हूं। मेरे पास कुछ VARCHAR कॉलम वाली एक तालिका है, जिसे नल के रूप में निर्दिष्ट किया गया है (यानी, नल मानों की अनुमति न दें)। अब
INSERT INTO mytable SET somevarchar = '';
, हालांकि, अगर मैं की तरह एक प्रश्न है: का उपयोग करते हुए पुराने MySQL PHP आदेश, मैं बिना किसी समस्या के इस तरह बातें कर सकता है
INSERT INTO mytable SET somevarchar = ?;
और फिर PHP में मेरे पास है:
$value = "";
$prepared = $db->prepare($query, array('text'));
$result = $prepared->execute($value);
यह "null value violates not-null constraint
"
त्रुटि फेंक होगा एक अस्थायी समाधान के रूप में, मैं ग बिल्ली $value
खाली है, और इसे " "
(एक ही स्थान) में बदलें, लेकिन यह एक भयानक हैक है और अन्य मुद्दों का कारण बन सकता है।
मैं तैयार बयान के साथ खाली तारों को कैसे सम्मिलित करना चाहता हूं, इसके बजाय इसे एक नल डालने की कोशिश किए बिना?
संपादित करें: यह मेरे पूरे कोडबेस के माध्यम से जाने के लिए एक परियोजना का बहुत बड़ा है, रिक्त स्ट्रिंग का उपयोग करने वाले हर जगह ढूंढें और इसके बजाय न्यूल का उपयोग करने के लिए इसे बदलें। मुझे यह जानने की ज़रूरत है कि क्यों मानक MySQL प्रश्न दो अलग-अलग चीजों के रूप में व्यवहार करते हैं (जैसा कि मुझे लगता है कि सही है), लेकिन तैयार कथन नल में परिवर्तित हो जाते हैं।
ध्यान दें कि "" और न्यूल समान नहीं हैं। उदाहरण के लिए, SELECT NULL = "";
1
के बजाय आपको अपेक्षा करता है।
आप "" डालने कर रहे हैं, जो मूल रूप से रिक्त है, तो क्यों में फ़ील्ड को परिवर्तित नहीं डीबी को शून्य की अनुमति देने के लिए। – UnkwnTech
यह "मूल रूप से शून्य" है वैसे ही 0 "मूल रूप से" झूठा है। वे समान हैं लेकिन वास्तव में काफी अलग हैं। – nickf
NULL का अर्थ है "कोई मान नहीं", "खाली स्ट्रिंग" – warren