2014-06-11 69 views
0

我知道這個問題有很多問題,但我只是無法理解。 我正在用php的帖子插入數據庫。每當我的字段爲空,將插入一個「0」的數據庫,而不是一個NULL值...我的代碼如下:如果沒有值發佈插入NULL到SQL數據庫

<?php 
$host=""; // Host name 
$username=""; // Mysql username 
$contra=""; // Mysql password 
$db_name=""; // Database name 

// Connect to server and select database. 
$dbh= mysql_connect("$host", "$username", "$contra")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 

// username and password sent from form 
$var1=$_POST["var1"]; 
$var2=$_POST["var2"]; 
$var3=$_POST["var3"]; 
$var4=$_POST["var4"]; 

// To protect MySQL injection 
$var1=stripslashes($var1); 
$var2=stripslashes($var2); 
$var3=stripslashes($var3); 
$var4=stripslashes($var4); 

$var1 = mysql_real_escape_string($var1); 
$var2 = mysql_real_escape_string($var2); 
$var3 = mysql_real_escape_string($var3); 
$var4 = mysql_real_escape_string($var4); 

      $sql="INSERT INTO PREGUNTAS (Var1, Var2, Var3, Var4) VALUES('$var1', '$var2', '$var3', '$var4');"; 
      $table= mysql_query($sql, $dbh) or die ("you've got a problem");    
        } 
    break; 
} 
?> 

我試着開始變這樣

$var2 = isset($_POST["var2"]) ? "'$var2'" : "NULL"; 

if($_POST['var2'] == "") $_POST['var2'] = "NULL"; 

但他們都沒有工作,查詢仍然加0。

,我收到以下錯誤/通知:

公告:未定義的索引:在上線/.....php VAR2 ...

你能幫幫我嗎?

謝謝!

+2

,因爲''NULL''是一個字符串,而'NULL'(沒有引號)表示空值 – Fabricator

+0

可能在數據庫中爲這些列設置的默認值是0.所以當NULL傳入0(默認值)時進入。 –

+0

你應該考慮PDO來適當引用這些字符串 – cmorrissey

回答

2

你引述你的字段值在查詢中,所以即使你設置一個特定的變量爲PHP中的字符串NULL,你仍然會試圖做

INSERT ... VALUES ('NULL', ...) 

SQL NULL是一個關鍵字,如果您希望DB將其視爲實際的空值,則不能引用它。

INSERT ... VALUES(NULL, 'NULL', ...) 
        ^^^^---actual SQL null 
         ^^^^^^--- a string which contains the letters N, U, L, L 

這意味着你需要以不同的重建查詢:

if ($_POST['var1'] == '') { 
    $db_var1 = 'NULL'; 
} else { 
    $db_var1 = "'" . mysql_real_escape_string($_POST['var1']) . "'"; 
} 

INSERT ... VALUES($db_var1, ...) 
+0

OP->考慮使用mysqli以更好地幫助避免sql注入 – Dave

0

使用empty()函數,而不是

$var2 = !empty($_POST["var2"]) ? "'$var2'" : NULL; 

isset()將永遠如此,因爲輸入字段提交,也避免使用與NULL雙引號,否則你將插入一個字符串

+1

這將繼續插入NULL作爲字符串.. –

0

試試這個:

$fields = array('var1','var2','var3','var4'); 
$values = array(); 
foreach($fields as $field) : 
    $field = isset($_POST[$field])? trim($_POST[$field]) : null; 
    if(is_null($field)) continue; 
    $values[$field] = "'".mysql_real_escape_string($field)."'"; 
endforeach; 

if(is_array($values) AND !empty($values)) : 
    $query = "INSERT INTO PREGUNTAS (".implode(',', array_keys($values)).") VALUES (".implode(',', array_values($values)).")"; 
    $table= mysql_query($query, $dbh) or die ("you've got a problem"); 
endif; 

或本:

試試這個:

$fields = array('var1','var2','var3','var4'); 
$values = array(); 
foreach($fields as $field) : 
    $field = isset($_POST[$field])? trim($_POST[$field]) : null; 
    if(is_null($field)) { 
     $values[$field] = 'NULL', 
     continue; 
    } 
    $values[$field] = "'".mysql_real_escape_string($field)."'"; 
endforeach; 

if(is_array($values) AND !empty($values)) : 
    $query = "INSERT INTO PREGUNTAS (".implode(',', array_keys($values)).") VALUES (".implode(',', array_values($values)).")"; 
    $table= mysql_query($query, $dbh) or die ("you've got a problem"); 
endif;