মাইএসকিউএল এবং পিএইচপি - খালি স্ট্রিংয়ের পরিবর্তে NULL প্রবেশ করান


88

আমার একটি মাইএসকিউএল স্টেটমেন্ট রয়েছে যা ডাটাবেসে কিছু ভেরিয়েবল সন্নিবেশ করায়। আমি সম্প্রতি 2 টি ক্ষেত্র যুক্ত করেছি যা alচ্ছিক ($ intLat, $ intLng)। এই মুহুর্তে, যদি এই মানগুলি প্রবেশ না করা হয় তবে আমি একটি খালি স্ট্রিংয়ের সাথে মান হিসাবে পাস করি। আমি কীভাবে মাইএসকিউএল এর কাছে একটি স্পষ্ট নূন্যমূল্য পাস করব (যদি খালি থাকে)?

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

উত্তর:


143

মাইএসকিউএল এ একটি নাল পাস করার জন্য, আপনি ঠিক এটি করেন।

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

23
@ জি 4bri3l: $queryস্ট্রিং এ, $intLatএবং $intLngউদ্ধৃত হয় না। সুতরাং, যখন ভেরিয়েবলগুলি আন্তঃবিবাহিত হয়, এটি হবে , NULL, NULL);
রকেট হাজমত

4
ওহ হ্যাঁ আমি এখন এটি দেখতে। সুন্দর! আমার কাছে এটি উল্লেখ করার জন্য সময় দেওয়ার জন্য ধন্যবাদ;)
G4bri3l

@ জি 4bri3l: কোনও সমস্যা নেই। আমি এখানে সহায়তা করতে এসেছি :)
রকেট হাজমত

4
@ আলেসাদ্রো: এই প্রশ্নটি অনেক পুরানো। আপনি যদি এর মতো কোনও এসকিউএল কোয়েরিতে ভেরিয়েবলগুলি যুক্ত করে থাকেন তবে আপনি এটি ভুল করছেন! দয়া করে PDO বা মাইএসকিউএলআইএর মধ্যে প্রস্তুত বিবৃতি ব্যবহার করতে স্যুইচ করুন।
রকেট হাজমত

17

আপনি যদি মানগুলি পাস না করেন তবে আপনি ডিফল্টের জন্য শূন্যস্থান পাবেন।

তবে আপনি কেবল উদ্ধৃতি ছাড়াই NULL শব্দটি পাস করতে পারেন।


8
টেবিলটি যদি এভাবে সেট আপ করা থাকে তবে তিনি কেবলমাত্র ডিফল্টর জন্য নুল পাবেন।
রকেট হাজমত

4
আমার কাছে এটি "alচ্ছিক" অর্থ।
dkretz

17

এটি আমার পক্ষে ঠিক কাজ করে:

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

(প্রথম ''বর্ধিত আইডি ক্ষেত্র)


4
NULLIF 2 পরামিতি নেয় NULLIF(expr1, expr2)Dev.mysql.com/doc/refman/5.7/en/…
রায় হিঙ্কলি

আমি মনে করি এটি ভাল কারণ আপনি কেবল একটি লাইনে করতে পারেন
hiddeneyes02

সুন্দর এবং সহজ!
হেডেন থ্রিং 21

প্রস্তুত বিবৃতি দিয়ে এত সহজ নয়।
মিঃমান

13

আপনাকে যা করতে হবে তা হ'ল: $variable =NULL;// এবং এটি সন্নিবেশ ক্যোয়ারিতে পাস করুন এটি mysql db তে NULL হিসাবে মান সংরক্ষণ করবে


"NULL" এর আশেপাশে উদ্ধৃতিগুলির দরকার নেই।
লুই

4

সাধারণত পিএইচপি থেকে আপনি মাইএসকিউএলে নিয়মিত মান যুক্ত করেন:

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) থাকে এবং আপনি নীচে এসকিউএল যোগ করতে চান এবং 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 "হিসাবে নয়। নন-নাল মানগুলি অবশ্যই "'"। $ ভাল 1। "" "ইত্যাদি হিসাবে যুক্ত করা উচিত etc.

আশা করি এটি সহায়তা করে, আমাকে কেবল কিছু হার্ডওয়্যার ডেটা লগারদের জন্য এটি ব্যবহার করতে হয়েছিল, তাদের মধ্যে কিছু তাপমাত্রা এবং বিকিরণ সংগ্রহ করে, অন্যরা কেবল বিকিরণ করে। টেম্পারেচার সেন্সরবিহীন তাদের জন্য আমার শুন্য প্রয়োজন, 0 নয়, সুস্পষ্ট কারণে (0 টি একটি স্বীকৃত তাপমাত্রার মানও)।


কলাম সংজ্ঞায়িত পূর্ণসংখ্যার জন্য, অন্য সমাধানটি এটি ঠিকঠাক কাজ করে তবে পাঠ্য ক্ষেত্রগুলির জন্য, আমার উপরে ক্যোয়ারীটি উপরের মতো স্ট্রিং কনটেন্টেশন হিসাবে ভেঙে ফেলতে হয়েছিল, যেমন রাধু উপরে করেছিল did $ ক্যোয়ারী = "ইউরডমনিটারের মধ্যে অন্তর্ভুক্ত করুন (ডিবি_ভ্যালু 1, ডিবি_ভ্যালু 2) ভ্যালু ("। "নুল" "।", "। $ ভাল 2।") ";
ব্রায়ান

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);

4
$ intLat এবং $ intLng হ'ল alচ্ছিক।
রকেট হাজমত

এটি কাজ করবে না। এই কোড স্নিপেটের সাথে বেশ কয়েকটি জিনিস ভুল রয়েছে (রকেট দেখানো হিসাবে ভুল ভেরিয়েবলগুলি ব্যবহার করা বাদে)। ত্রৈমাসিক অপারেটরের প্রাধান্যের কারণে, আপনাকে প্রকাশের চারপাশে প্রথম বন্ধনী প্রয়োজন need তবে গুরুতরভাবে, আপনি এখনও একক উদ্ধৃতিতে কলামের মানটি ঘিরে রেখেছেন, তাই আপনি ডাটাবেস নয়, স্ট্রিং বরাদ্দ করে স্কোয়ার ওয়ানে ফিরে আসছেন NULL। এছাড়াও, আপনি পিএইচপি NULL(অব্যক্ত) কীওয়ার্ড ব্যবহার করছেন , যা একটি স্ট্রিং প্রসঙ্গে খালি স্ট্রিংয়ের মূল্যায়ন করে, তাই আবার আপনি একটি খালি স্ট্রিং বরাদ্দ করছেন ।
মিঃ হোয়েট

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."'")) . 
    ")";

'নাল' (উদ্ধৃতি সহ) উদ্ধৃতি ব্যতীত নলের পরিবর্তে wasোকানো হয়েছিল, এটি একটি পূর্ণসংখ্যার পরিবর্তে একটি স্ট্রিং তৈরি করে। সুতরাং আমি শেষ পর্যন্ত চেষ্টা করেছি:

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

ফাঁকা ফলাফলের ফলে কোয়ারিতে সঠিক নাল (উদ্ধৃত) প্রবেশ করানো হয়েছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.