PHP 之mysql空字符串问题

摘要:
有一张user表如下所示:字段name不能为空。可以看出mysql不会把空字符串当作NULL来对待的。对于PHP客户端向数据库中插入一条记录:Name:Age:当我什么也不输入直接提交是可以提交成功的。主要是我们的sql语句的问题:$sql="insertintouservalues";如果我们没有在表单里填写数据,$name就是空,但是我们的sql语句对$name加上了单引号,此时对于mysql数据库就是一个空字符串而不是NULL,所以数据库不是报错。

有一张user表如下所示:字段name不能为空。

CREATE TABLE `user` (
`id` int(11) NOT NULLAUTO_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=newMysqlTool();
    $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,所以数据库不是报错。

免责声明:文章转载自《PHP 之mysql空字符串问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Shell 变量Web--js高级--11月30日随笔下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

MYSQLdump参数详解

mysqldump客户端可用来转储数据库或搜集数据库进行备份或将数据转移到另一个SQL服务器(不一定是一个MySQL服务器)。转储包含创建表和/或装载表的SQL语句。 如果你在服务器上进行备份,并且表均为MyISAM表,应考虑使用mysqlhotcopy,因为可以更快地进行备份和恢复。 有3种方式来调用mysqldump: shell> mysqld...

PHP安装Redis扩展

记录一次中windows上给php安装redis扩展流程; 一、PHP中Redis扩展安装配置 上一张图看一下当前PHP版本信息,因为版本非常多,稍微不慎将会安装失败。 我本地是xampp集成环境, 由图可见 1、我php版本是7.1.13,所以下载php_redis.dll扩展要下载7.1版本的 2、Architecture是x86,所以redis应该选...

linux安装mysql(unrecognized service错误)

今天在Linux在安装MySQL,安装完成后却无法打开,百度找原因,试了很多方法终于解决了。 MySQL安装: [root@centos usr]# yum install mysql 无法正常启动: 查询确实已安装: 按照百度的方法启动,还是无法开启:找不到此文件 换个命令重新安装: [root@centos ~]# yum install mys...

MySQL-快速入门(8)存储过程、存储函数

1、存储过程 1》创建存储过程:create procedure create procedure sp_name ([in | out | inout]param_name type) [characteristics ...] routine_body characteristics指定存储过程的特性: 1>language sql:说明rou...

mysql导出表导入表到tidb

前提在有mysql客户端的服务器上  1、导出并压缩  mysqldump -h database_ip -P 4000 -u root -p database_name(库名) tables_name(表名) |gzip >tables_name.sql.gz 2、解压导出文件  gunzip  tables_name.sql.gz 3、导入tid...

PHP 基础

1.POST GET区别 POST 和GET是什么?HTTP协议中的两种发送请求的方法 HTTP是什么?HTTP是基于TCP/IP的关于数据如何在万维网中如何通信的协议。 HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接 GET - 从指定的资源请求数据。 ---查询字符串(名称/值对)是在...