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

9 ответов:

чтобы передать NULL в MySQL, вы делаете именно это.

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

Итак, в вашем коде проверьте if $intLat, $intLng are 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)";

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

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

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

это работает просто отлично для меня:

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

("первый"!--1-- > увеличивает поле 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'

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

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

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