2012-11-13 2 views
1

가능한 중복 :
Insert NULL variable into database값 또는 NULL을 삽입하는 방법?

나는 테이블 (로그)가 열 :

초 : BIGINT (20) UNSIGNED NULL

하여 IPAddress : VARCHAR (15) NULL

프로 불확실한 점은 변수에 값이 NULL이 지정 될 때마다 IPAddress 열의 빈 문자열로 열에 삽입되고 NULL이 아닌 Seconds 열의 0으로 열에 삽입된다는 것입니다.

//PHP 5.3.9// 

if(isset($_POST['sec'])) 
     $seconds = mysql_real_escape_string($_POST['sec']); 
else 
    $seconds = NULL; 

if(isset($_POST['ip'])) 
    $ipaddress = mysql_real_escape_string($_POST['ip']); 
else 
    $ipaddress = NULL; 

$query = mysql_query("INSERT INTO log (Seconds, IPAddress) VALUES('".$seconds."', '".$ipaddress."')", $DbConnectionMyDb); 

나는 모든 구글을 통해 검색 한하지만, 모든 해답은 이미 변수 $ 초$의 IP이 NULL 여부가 될 것 여부를 알고 있다고 가정합니다. 제 경우에는 POST 데이터에 따라 다릅니다.

도움을 주시면 감사하겠습니다. 감사합니다. .

+0

자리 표시 자 사용. 그들은 NULL 처리를 돌볼 것이고, 특정 못생긴보고 기능을 수동으로 호출 할 필요없이 * SQL 인젝션을 처리 할 것이다. (문제는' '''문자열이며, 'NULL'이 삽입물의 값으로 사용되지 않습니다.) –

+0

문자열을 가져올 때 문자열이기 때문에 (mysql_real_escape_STRING) –

+0

PHP mysql NULL과 다른 문자열을 NULL로 정의합니다. 당신의 쿼리에서 (IE의 if 문) 변수가 NULL인지 확인해야합니다. 그렇다면 VALUES (NULL, ' ". $ ipaddress."') 따옴표를 사용하지 않아야합니다. –

답변

3
"" !== NULL 
"NULL" !== NULL 
NULL === NULL 

당신은 문자열에 변수를 결합하는 순간 ""

1

를 삽입, 변수에 NULL 값은 빈 문자열로 주조된다. 데이터베이스 라이브러리 또는 어떤 종류를 사용하여,

if (is_null($seconds)) $seconds='NULL'; else $seconds='"'.$seconds.'"'; 
if (is_null($ipaddress)) $ipaddress='NULL'; else $ipaddress='"'.$ipaddress.'"'; 
$query = mysql_query("... VALUES(".$seconds.", ".$ipaddress.")", ...); 

을하지만 : 당신은 아마도에 의해 할 수

VALUES (NULL, NULL) 

하지

VALUES ("", "") 

을 : 당신은 실제로 읽는 쿼리를 구성 할 필요가 이러한 종류의 작업을 추상화하는 PDO는 장기적으로 더 나을 것입니다.

관련 문제