PHP 之mysql空字符串问题

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


 

 

 

你可能感兴趣的:(mysql)