我有一个包含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 :(得分: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
。