MySQL и PHP - вставьте NULL вместо пустой строки - PullRequest
71 голосов
/ 07 января 2011

У меня есть оператор 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);

Ответы [ 9 ]

122 голосов
/ 07 января 2011

Чтобы передать 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)";
12 голосов
/ 07 января 2011

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

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

8 голосов
/ 08 декабря 2016

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

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

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

8 голосов
/ 06 мая 2016

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

3 голосов
/ 10 октября 2013

Обычно вы добавляете обычные значения в 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
}

Когда ваши значения пустые / пустые ($ 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 также является допустимым значением температуры).

2 голосов
/ 07 января 2011

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

$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);
1 голос
/ 08 марта 2014

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

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

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

1 голос
/ 12 июля 2013

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

UPDATE `table` SET `date`='', `newdate`=NULL WHERE id='$id'
1 голос
/ 07 января 2011

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

...