有一张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,所以数据库不是报错。

