MySQL और PHP - खाली स्ट्रिंग के बजाय NULL डालें


85

मेरा एक MySQL स्टेटमेंट है जो डेटाबेस में कुछ वेरिएबल्स को सम्मिलित करता है। मैंने हाल ही में 2 फ़ील्ड जोड़े हैं जो वैकल्पिक हैं ($ intLat, $ intLng)। अभी, यदि ये मान दर्ज नहीं हैं, तो मैं एक मूल्य के रूप में एक रिक्त स्ट्रिंग के साथ गुजरता हूं। मैं MySQL (यदि खाली हो) के लिए एक स्पष्ट पूर्ण मान कैसे पास करूं?

$query = "INSERT INTO data (notes, id, filesUploaded, lat, lng, intLat, intLng)
          VALUES ('$notes', '$id', TRIM('$imageUploaded'), '$lat', '$long', 
                  '$intLat', '$intLng')";
mysql_query($query);

जवाबों:


141

NULL to MySQL को पास करने के लिए, आप बस इतना ही करते हैं।

INSERT INTO table (field,field2) VALUES (NULL,3)

इसलिए, आपके कोड में, चेक if $intLat, $intLngहैं empty, यदि वे हैं, या के NULLबजाय का उपयोग करें ।'$intLat''$intLng'

$intLat = !empty($intLat) ? "'$intLat'" : "NULL";
$intLng = !empty($intLng) ? "'$intLng'" : "NULL";

$query = "INSERT INTO data (notes, id, filesUploaded, lat, lng, intLat, intLng)
          VALUES ('$notes', '$id', TRIM('$imageUploaded'), '$lat', '$long', 
                  $intLat, $intLng)";

9
यह mysql NULL मान नहीं जोड़ता है। यह "NULL" स्ट्रिंग की विशेषता निर्धारित करता है जो mysql NULL मान से अलग है। मैं सिर्फ यह कह रहा हूं कि आपने दो अलग-अलग चीजें लिखी हैं, पहला सही दूसरा है जो मुझे नहीं लगता।
G4bri3l

22
@ G4bri3l: $queryस्ट्रिंग में, $intLatऔर $intLngउद्धृत नहीं हैं। इसलिए, जब चरों को प्रक्षेपित किया जाता है, तो यह होगा , NULL, NULL);
रॉकेट हज़रत

2
ओह, हाँ, अब मैं देख रहा हूँ। अच्छा! इसे मेरे पास इंगित करने के लिए समय निकालने के लिए धन्यवाद;)
G4bri3l

@ G4bri3l: कोई संभावना नहीं। मैं यहाँ मदद करने के लिए :)
रॉकेट हज़मत

2
@alessadro: यह सवाल बहुत पुराना है। यदि आप उस तरह एक SQL क्वेरी में चर समवर्ती कर रहे हैं, तो आप इसे गलत कर रहे हैं! कृपया पीडीओ या MySQLi में तैयार कथनों का उपयोग करने के लिए स्विच करें।
रॉकेट हज़मत

17

यदि आप मान नहीं पास करते हैं, तो आपको चूक के लिए नल मिलेंगे।

लेकिन आप केवल बिना उद्धरण के NULL शब्द पास कर सकते हैं।


8
वह केवल डिफ़ॉल्ट रूप से NULL प्राप्त करेगा, यदि तालिका को इस तरह सेट किया गया है।
रॉकेट हज़मत

2
मेरे लिए यही "वैकल्पिक" का अर्थ है।
dkretz

17

यह मेरे लिए ठीक काम करता है:

INSERT INTO table VALUES ('', NULLIF('$date',''))

(पहला ''वेतन वृद्धि आईडी क्षेत्र)


1
NULLIF में 2 पैरामीटर हैं NULLIF(expr1, expr2)। देखें dev.mysql.com/doc/refman/5.7/en/...
रॉय Hinkley

मुझे लगता है कि यह बेहतर है क्योंकि आप सिर्फ एक लाइन में कर सकते हैं
Hiddeneyes02

अच्छा और सरल!
हेडन थ्रिंग जूल

तैयार कथनों के साथ इतना सरल नहीं है।
मृमन

13

आपको बस इतना करना है: $variable =NULL;// और इसे सम्मिलित क्वेरी में पास करें। यह मान को mysql db में NULL के रूप में संग्रहीत करेगा


"NULL" के आसपास उद्धरणों की आवश्यकता नहीं है।
लुई

4

आम तौर पर, आप इस तरह से PHP से mySQL में नियमित मान जोड़ते हैं:

function addValues($val1, $val2) {
    db_open(); // just some code ot open the DB 
    $query = "INSERT INTO uradmonitor (db_value1, db_value2) VALUES ('$val1', '$val2')";
    $result = mysql_query($query);
    db_close(); // just some code to close the DB
}

जब आपके मान रिक्त / शून्य ($ val1 == "" या $ val1 == NULL) हों, और आप चाहते हैं कि NULL को SQL में जोड़ा जाए न कि 0 या रिक्त स्ट्रिंग, निम्न के लिए:

function addValues($val1, $val2) {
    db_open(); // just some code ot open the DB 
    $query = "INSERT INTO uradmonitor (db_value1, db_value2) VALUES (".
        (($val1=='')?"NULL":("'".$val1."'")) . ", ".
        (($val2=='')?"NULL":("'".$val2."'")) . 
        ")";
    $result = mysql_query($query);
    db_close(); // just some code to close the DB
}

ध्यान दें कि अशक्त को "NULL" के रूप में जोड़ा जाना चाहिए और "NULL" के रूप में नहीं। गैर-शून्य मानों को "" "$ val1" "" आदि के रूप में जोड़ा जाना चाहिए।

आशा है कि यह मदद करता है, मुझे बस कुछ हार्डवेयर डेटा लॉगर्स के लिए इसका उपयोग करना था, उनमें से कुछ तापमान और विकिरण एकत्र करते हैं, अन्य केवल विकिरण। तापमान संवेदक के बिना मुझे स्पष्ट कारणों के लिए NULL और 0 की आवश्यकता नहीं थी (0 एक स्वीकृत तापमान मान भी है)।


स्तंभ परिभाषित पूर्णांकों के लिए, दूसरा समाधान यह ठीक काम करता है, लेकिन पाठ क्षेत्रों के लिए, मुझे क्वेरी को एक स्ट्रिंग संयोजन में ऊपर तोड़ना पड़ा, जैसे कि राधू ने ऊपर किया था। $ क्वेरी = "INSERT INTO uradmonitor (db_value1, db_value2) VALUES ("। "NULL"। ","। $ val2। ")";
ब्रायन

2

आपकी क्वेरी निम्नानुसार जा सकती है:

$query = "INSERT INTO data (notes, id, filesUploaded, lat, lng, intLat, intLng)
      VALUES ('$notes', '$id', TRIM('$imageUploaded'), '$lat', '$lng', '" . ($lat == '')?NULL:$lat . "', '" . ($long == '')?NULL:$long . "')";
mysql_query($query);

2
$ intLat, और $ intLng वैकल्पिक हैं।
रॉकेट हज़मत

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

1

क्वेरी बनाने से पहले चर की जाँच करें, यदि वे खाली हैं, तो उन्हें स्ट्रिंग NULL में बदल दें


1

आप इसे उदाहरण के लिए कर सकते हैं

UPDATE `table` SET `date`='', `newdate`=NULL WHERE id='$id'

1

किसी कारण से, राधू का समाधान मेरे लिए काम नहीं करेगा। जब मैंने निम्नलिखित अभिव्यक्ति का उपयोग किया:

$query = "INSERT INTO uradmonitor (db_value1, db_value2) VALUES (".
    (($val1=='')?"NULL":("'".$val1."'")) . ", ".
    (($val2=='')?"NULL":("'".$val2."'")) . 
    ")";

'null' (उद्धरण के साथ) बिना उद्धरण के null के बजाय डाला गया था, जिससे यह एक पूर्णांक के बजाय एक स्ट्रिंग बन गया। इसलिए मैंने अंत में कोशिश की:

$query = "INSERT INTO uradmonitor (db_value1, db_value2) VALUES (".
    (($val1=='')? :("'".$val1."'")) . ", ".
    (($val2=='')? :("'".$val2."'")) . 
    ")";

रिक्त को सही शून्य (अयोग्य) के परिणामस्वरूप क्वेरी में डाला गया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.