2015-02-06 4 views
0

문자열을 통해 전달하는 일반적인 HTML 파일이 있습니다. POST를 PHP 파일에 보내면 MySQL 데이터베이스에 저장됩니다.PHP 데이터베이스에 NULL을 삽입하는 방법?

"진짜"NULL을 ""(빈 문자열)이 아닌 데이터베이스에 쓸 수있는 방법은 무엇입니까?

MySQL 열은 null입니다.

내 양식 :

<form method="post" action="putInDatabase.php"> 

    <label>Text</label> 
    <textarea name="text" ></textarea> 

    <label>Picture URL (optional)</label> 
    <input name="image" /> 
    <br> 

    <input id="submit" name="submit" type="submit" value="submit"> 

</form> 

내 PHP 파일 : 당신은 당신의 텍스트를 사전 처리해야 할 것

<?php 

    $text = ""; 
    $image = null; 

    if (isset($_POST["submit"])) 
    { 
    $text = $_POST["text"]; 

    $image = $_POST["image"]; 
    } 

    $text = strtr ($text, array ('"' => '\"')); 


    $con = mysql_connect("censored :)"); 

    if (!$con) 
    { 
    die('ERROR' . mysql_error()); 
    } 
    mysql_select_db("_DATABASE_HERE_", $con); 


    $insertSQL = "INSERT INTO `_DATABASE_HERE_`.`_NAME_HERE_` (`Text`, `PictureURL`) VALUES ('$text', '$image ');"; 

    $res = mysql_query($insertSQL); 
    $res = mysql_query($sql); 

    mysql_close($con); 

    echo "Success!"; 

?> 
+0

양식 요소에 NULL 단어를 입력 하시겠습니까? –

+0

먼저 열이 nullable로 설정되어 있는지 확인해야합니다. 그렇다면 insert 문에 NULL을 쓸 수 있습니다. – Gal

+0

'PDO' 또는'MySQLi' prepared statements로 전환해야합니다 !!! – cmorrissey

답변

2

. 당신이 sql injection attacks에 취약있어 이후 그리고 이것은 의무적 고려되어야한다 : 따옴표가 if() 내부에 추가하는 방법을

if (isset($_POST['text']) && !empty($_POST['text'])) { 
    $safetext = "'" . mysql_real_escape_string($_POST['text']) . "'"; 
} else { 
    $safetext = 'null'; 
} 

$sql = "INSERT ... VALUES ($safetext, ...)"; 

참고. 완료 할 텍스트가 있으면 SQL 이스케이프 된 텍스트가 따옴표로 묶입니다. 텍스트가 전혀 없으면 null 문자열이 추가됩니다. 이는 null'null'의 차이로 요약됩니다.

null은 "알 수없는 값"입니다. 'null'은 리터럴 문자 n, u, ll이 포함 된 문자열입니다. SQL 용어로, 그것들은 완전히 다른 두 가지입니다.

위의 코드는

INSERT ... VALUES (null, ...) 
INSERT ... VALUES ('Miles O\'Brien', ...) 
+0

나는이 null을 원한다. – DominikTV

+0

이 코드는 정확히 무엇을 할 것이다. –

+0

년, 내가 원한 것은 100 %가 아니지만 작동합니다. 감사합니다. :) – DominikTV

0

이 시도 생산할 것 :

$variable_name = "NULL"; 

를 이제 데이터베이스를 사용 $의 VARIABLE_NAME에 삽입하는 동안.

그렇게해야합니다.

EDIT : 향후 PDO로 전환하거나 사용자 입력을 이스케이프 처리하려면 prepare 문을 사용해야합니다.

관련 문제