2011-10-28 62 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