MySQL 및 PHP-빈 문자열 대신 NULL 삽입


85

데이터베이스에 몇 가지 변수를 삽입하는 MySQL 문이 있습니다. 최근에 선택적 필드 ($ 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);

답변:


141

MySQL에 NULL을 전달하려면 그렇게하면됩니다.

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 값을 추가하지 않습니다. 이것은 mysql NULL 값과 다른 문자열 "NULL"로 속성을 설정합니다. 나는 단지 당신이 두 가지 다른 것을 썼다고 말하는 것입니다. 첫 번째는 옳고 두 번째는 제 생각에는 그렇게 많지 않습니다.
G4bri3l 2014

22
G4bri3l @ 다음에 $query문자열 $intLat과는 $intLng인용되지 않습니다. 따라서 변수가 보간되면 , NULL, NULL);.
Rocket Hazmat 2014

2
오, 그래요 지금 알겠습니다. 좋은! 시간을내어 알려 주셔서 감사합니다;)
G4bri3l

@ G4bri3l : 문제가 없습니다. 제가 도와 드리겠습니다 :)
Rocket Hazmat 2014

2
@alessadro :이 질문은 아주 오래되었습니다. 이와 같은 SQL 쿼리에 변수를 연결하는 경우 잘못하고있는 것입니다! PDO 또는 MySQLi에서 준비된 명령문 사용으로 전환하십시오.
Rocket Hazmat 2015 년

17

값을 전달하지 않으면 기본값으로 null이 표시됩니다.

그러나 따옴표없이 NULL이라는 단어를 전달할 수 있습니다.


8
테이블이 그런 방식으로 설정된 경우 그는 기본값으로 만 NULL을 얻습니다.
Rocket Hazmat 2011 년

2
나에게 그것은 "선택적"의 의미입니다.
dkretz 2011 년

17

이것은 나를 위해 잘 작동합니다.

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

(첫 번째 ''증가 ID 필드)


1
NULLIF는 2 개의 매개 변수를 사용 NULLIF(expr1, expr2)합니다. 참조 dev.mysql.com/doc/refman/5.7/en/...
로이 힝 클리에게

나는 이것이 좋은 생각 당신은 단지 하나 개의 라인에서 할 수 있기 때문에
hiddeneyes02

멋지고 간단합니다!
Hayden Thring 19

준비된 진술로는 그렇게 간단하지 않습니다.
MrrMan

13

당신이해야 할 일은 $variable =NULL;// 그리고 그것을 삽입 쿼리에 전달하는 것입니다. 이것은 mysql db에 값을 NULL로 저장합니다.


"NULL"을 따옴표로 묶을 필요가 없습니다.
Louis

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'"이 아닌 "NULL"로 추가되어야합니다. 널이 아닌 값은 " '". $ val1. "'"등으로 추가해야합니다.

이것이 도움이되기를 바라며, 일부 하드웨어 데이터 로거에 이것을 사용해야했습니다. 일부는 온도와 복사를 수집하고 다른 일부는 복사 만 수집했습니다. 온도 센서가없는 경우에는 명백한 이유로 0이 아닌 NULL이 필요했습니다 (0도 허용되는 온도 값입니다).


열 정의 정수의 경우 다른 솔루션이 잘 작동하지만 텍스트 필드의 경우 radhoo가 위에서 한 것처럼 위와 같이 쿼리를 문자열 연결로 분리해야했습니다. $ query = "INSERT INTO uradmonitor (db_value1, db_value2) VALUES (". "NULL". ",". $ val2. ")";
Brian

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는 선택 사항입니다.
Rocket Hazmat 2011 년

작동하지 않습니다. 이 코드 스 니펫에는 몇 가지 잘못된 점이 있습니다 (로켓이 지적한대로 잘못된 변수를 사용하는 것 제외). 삼항 연산자의 우선 순위 때문에 식을 괄호로 묶어야합니다. 그러나 결정적으로 열 값을 작은 따옴표로 둘러싸고 있으므로 데이터베이스가 아닌 문자열을 할당하여 원점으로 돌아갑니다 NULL. 또한 NULL문자열 컨텍스트에서 빈 문자열로 평가되는 PHPs (따옴표없는) 키워드를 사용하고 있으므로 다시 빈 문자열을 할당 합니다 .
MrWhite

1

쿼리를 작성하기 전에 변수를 확인하고 비어있는 경우 NULL 문자열로 변경하십시오.


1

예를 들어 할 수 있습니다.

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

1

어떤 이유로 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."'")) . 
    ")";

공백으로 인해 쿼리에 올바른 null (따옴표 없음)이 삽입되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.