非空列接受NULL值

时间:2011-10-28 16:01:18

标签: php mysql

我有一个包含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. "')";

1 个答案:

答案 0 :(得分: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