2011-10-28 58 views
0

我有一個包含NOT NULL列的表,但是當我運行帶有NULL值的PHP腳本(插入查詢)時,數據庫將插入一行包含NULL值的行。我想在沒有數據時顯示錯誤消息。我有以下SQLMODE。接受空值的非空列

STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

可能是什麼問題呢?感謝您的任何意見。

CREATE TABLE `TABLE1` (
    `aId` int(11) NOT NULL auto_increment, 
    `FirstName` varchar(100) NOT NULL, 
    `LastName` varchar(100) NOT NULL, 
    `CreateDTM` timestamp NOT NULL default CURRENT_TIMESTAMP, 
    PRIMARY KEY (`aId`) 
) 

      $first = $_POST["first"]; 
      $first = mysql_real_escape_string($first); 
      $last = $_POST["last"]; 
      $last = mysql_real_escape_string($last); 

    $insertsql = "INSERT INTO TABLE1(FirstName,LastName) VALUES ('".$first."', '" .$last. "')"; 
+0

請顯示您的數據庫結構和插入數據的確切代碼。你確定你插入一個MySQL的NULL值,而不是一個簡單的「NULL」字符串? – str

+0

哪裏插入NULL值? – str

回答

0

值不爲空,它們是空字符串。這是兩個完全分離的值。給這個試試看,它應該會拋出一個錯誤:

 $first = !empty($_POST["first"])?mysql_real_escape_string($_POST['first']):null; 
     $last = !empty($_POST["last"])?mysql_real_escape_string($_POST['last']):null; 

它應該會出錯。這個? :基本上是縮短的if/else語句,稱爲三元運算符。

真正的解決方案,不是依靠數據庫拋出錯誤,而是在運行查詢之前做你的檢查,這樣你可以處理錯誤信息一點點清潔,並告知用戶出了什麼問題。

編輯

爲什麼它被插入,即使上面的設置爲NULL?

 $insertsql = "INSERT INTO TABLE1(FirstName,LastName) VALUES ('".$first."', '" .$last. "')"; 

注單引號,這將使字面上的$first值。這就是爲什麼準備好的語句等是做數據庫任務的好方法,就好像你刪除了單引號(明顯用於測試),我的賭注是,它不會允許null

+0

它仍然插入空值。 – nav100

+0

好吧,你正在'INSERT'語句中用單引號包圍數據。這可能會使'NULL'字面上。如前所述,你應該實現一個更好的錯誤檢查系統,而不是依靠MySQL來爲你做。由於這些值不是真正的NULL,因爲您將它們包含在單引號中。 –

+0

如果我刪除單引號,我收到以下錯誤。 「你的SQL語法有錯誤,請查看與你的MySQL服務器版本對應的手冊」 – nav100