MySQL и PHP – вставьте NULL, а не пустую строку

У меня есть оператор MySQL, который вставляет некоторые переменные в базу данных. Недавно я добавил 2 поля, которые являются необязательными ($ intLat, $ intLng). Прямо сейчас, если эти значения не введены, я передаю пустую строку в качестве значения. Как передать явное значение NULL в MySQL (если пусто)?

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

Чтобы передать NULL в 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)"; 

Если вы не передадите значения, вы получите nulls для значений по умолчанию.

Но вы можете просто передать слово NULL без кавычек.

Все, что вам нужно сделать, это: $variable =NULL; // и передать его в запросе вставки. Это будет хранить значение как NULL в mysql db

Это прекрасно работает для меня:

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

(первое «увеличивает поле id»)

Обычно вы добавляете регулярные значения в mySQL, начиная с PHP:

 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 } 

Когда ваши значения пусты / null ($ 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», а не как «NULL». Непустые значения должны быть добавлены как «». $ Val1. "'" И т. Д.

Надеюсь, это поможет, я просто должен был использовать это для некоторых аппаратных регистраторов данных, некоторые из которых собирают температуру и излучение, а другие – только излучение. Для тех, у кого нет датчика температуры, мне понадобилось NULL, а не 0, по очевидным причинам (0 – также принятое значение температуры).

ваш запрос может выглядеть следующим образом:

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

Проверьте переменные перед созданием запроса, если они пусты, измените их на строку NULL

вы можете сделать это, например, с помощью

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

По какой-то причине решение radhoo не будет работать для меня. Когда я использовал следующее выражение:

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

'null' (с кавычками) был вставлен вместо нуля без кавычек, что делает его строкой вместо целого. Поэтому я, наконец, попробовал:

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

Пустой результат привел к правильному нулевому (неуказанному), который был вставлен в запрос.