有一张user表如下所示:字段name不能为空。
CREATE TABLE ` user ` ( `id` int ( 11 ) NOT NULL AUTO_INCREMENT, `name` char ( 20 ) NOT NULL , `age` int ( 11 ) DEFAULT NULL , PRIMARY KEY (`id`) ) ENGINE = MyISAM DEFAULT CHARSET = utf8
现在在命令行上执行以下两条命令:
mysql> insert into user(name,age) value(null,null);
ERROR 1048 (23000): Column 'name' cannot be null
mysql> insert into user(name,age) value('',null);
Query OK, 1 row affected (0.00 sec)
mysql> insert into user(name,age) value("",null);
Query OK, 1 row affected (0.00 sec)
可以看出,当name为null时系统会提示错误,当name为 '' 和 "" 时就插入成功了。可以看出mysql不会把空字符串当作NULL来对待的。
对于PHP客户端向数据库中插入一条记录:(没有对表单字段进行一个逻辑判断)
<? php if (! empty ( $_POST ['submit' ])){ require_once ('MysqlTool.class.php' ); $mysqli = new MysqlTool(); $name = $_POST ['name' ]; $age = $_POST ['age' ]; $sql ="insert into user(name,age) values(' $name ', $age )" ; echo $mysqli ->execute_dql( $sql ); } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <form method="post"> Name :<input type="text" name="name"/><br/> Age :<input type="text" name="age"/><br/> <input type="submit" value="Submit" name="submit"/> </form> </body> </html>
当我什么也不输入直接提交是可以提交成功的。主要是我们的sql语句的问题:
$sql = " insert into user (name,age) values ( ' $name ' ,$age)";
如果我们没有在表单里填写数据,$name就是空,但是我们的sql语句对$name加上了单引号,此时对于mysql数据库就是一个空字符串而不是NULL,所以数据库不是报错。