zoukankan      html  css  js  c++  java
  • 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,所以数据库不是报错。

    
    
    
    
    
  • 相关阅读:
    DHCP三种配置
    Linux-9引导过程与服务控制
    Linux系统管理10-进程和计划任务管理
    Linux系统管理11-系统安全及应用
    Linux系统管理12-Linux文件系统与日志
    ---01--Lin网络基础设置
    服务器RAID及磁盘配额的配置
    Linux常见故障及修复方法
    作业5
    104 权限 sudo 解压缩
  • 原文地址:https://www.cnblogs.com/yshyee/p/3398705.html
Copyright © 2011-2022 走看看