mysql严格模式Strict Mode怎么使用
找到mysql安装目录下的my.cnf(windows系统则是my.ini)文件
在sql_mode中加入STRICT_TRANS_TABLES则表示开启严格模式,如没有加入则表示非严格模式,修改后重启mysql即可
例如这就表示开启了严格模式:
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
2.Strict Mode功能说明不支持对not null字段插入null值
不支持对自增长字段插入”值
不支持text字段有默认值
创建数据表方便测试
CREATE TABLE `mytable` (`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`content` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1.not null字段插入null值测试
插入一条记录,name的值为null
在非严格模式下执行
mysql>insert into mytable(content) values('
programmer'
);
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql>
select * from mytable;
+----+------+------------+
| id | name | content |
+----+------+------------+
| 1 | | programmer |
+----+------+------------+
1 row in set (0.00 sec)
执行成功,name的值自动转为”
在严格模式下执行
mysql>insert into mytable(content) values('
programmer'
);
ERROR 1364 (HY000): Field '
name'
doesn'
t have a default value
执行失败,提示字段name不能为null值
2.自增长字段插入”值测试对id字段插入”值
在非严格模式下执行
mysql>insert into mytable(id,name,content) value('
'
,'
fdipzone'
,'
programmer'
);
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql>
select * from mytable;
+----+----------+------------+
| id | name | content |
+----+----------+------------+
| 1 | fdipzone | programmer |
+----+----------+------------+
1 row in set (0.00 sec)
执行成功
在严格模式下执行
mysql>insert into mytable(id,name,content) value('
'
,'
fdipzone'
,'
programmer'
);
ERROR 1366 (HY000): Incorrect integer value: '
'
for column '
id'
at row 1
执行失败,提示字段id不能为”
mysql>insert into mytable(id,name,content) value(null,'
fdipzone'
,'
programmer'
);
Query OK, 1 row affected (0.00 sec)
mysql>
select * from mytable;
+----+----------+------------+
| id | name | content |
+----+----------+------------+
| 1 | fdipzone | programmer |
+----+----------+------------+
1 row in set (0.00 sec)
字段id为null则可执行成功
3.text字段默认值测试创建一个数据表mytable,其中text设置默认值default=”
在非严格模式下执行
mysql>CREATE TABLE `mytable` (
->
`id` int(11) NOT NULL AUTO_INCREMENT,
->
`name` varchar(20) NOT NULL,
->
`content` text NOT NULL default '
'
,
->
PRIMARY KEY (`id`)
->
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected, 1 warning (0.03 sec)
mysql>
show tables;
+------------------------------+
| Tables_in_test_version |
+------------------------------+
| mytable |
+------------------------------+
执行成功
在严格模式下执行
mysql>CREATE TABLE `mytable` (
->
`id` int(11) NOT NULL AUTO_INCREMENT,
->
`name` varchar(20) NOT NULL,
->
`content` text NOT NULL default '
'
,
->
PRIMARY KEY (`id`)
->
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ERROR 1101 (42000): BLOB/TEXT column '
content'
can'
t have a default value
执行失败,提示content字段是TEXT类型,不能使用默认值。
使用MySQL的严格模式可以增强数据的安全性,但缺点是降低了对空数据入库的兼容性。建议开发环境使用严格模式以提高代码的质量及对数据的严谨性。
JSON(JavaScript对象表示法)已成为当今流行的数据交换格式之一。它是一种轻量级的数据交换格式,易于阅读和编写,并且非常易于在JavaScript和PHP中使用。本文将介绍如何在PHP中将JSON数据转换为数组对象,以便于在Web应用程序中使用。
1. JSON数据转换为PHP数组
将JSON数据转换为PHP数组是一个非常简单的过程。以下是将JSON数据转换为PHP数组的代码示例:
$jsonData = '{\"name\":\"John\", \"age\":30, \"city\":\"New York\"}';
$phpArray = json_decode($jsonData, true);
上面的代码使用json_decode()函数将JSON数据转换为PHP数组。函数的第一个参数是要转换的JSON字符串。第二个参数是一个bool型的数据,用于指定是否将JSON数据转换为关联数组。如果将它设置为false,那么json_decode()函数将生成一个标准的PHP对象。
2. JSON数据转换为PHP对象
除了将JSON数据转换为PHP数组之外,我们还可以将其转换为一个PHP对象。以下是将JSON数据转换为PHP对象的代码示例:
$jsonData = '{\"name\":\"John\", \"age\":30, \"city\":\"New York\"}';
$phpObj = json_decode($jsonData);
上面的代码使用json_decode()函数将JSON数据转换为PHP对象。与数组一样,如果将第二个参数设置为true,则json_decode()函数将生成一个关联数组。
3. JSON数据转换为对象数组
有时候,我们需要将JSON数据转换为一个对象数组而不是一个单独的PHP对象。以下是将JSON数据转换为对象数组的代码示例:
$jsonData = '[{\"name\":\"John\", \"age\":30, \"city\":\"New York\"},
{\"name\":\"Jane\", \"age\":25, \"city\":\"Los Angeles\"},
{\"name\":\"Bob\", \"age\":40, \"city\":\"Chicago\"}]';
$phpArray = json_decode($jsonData);
$objArray = array();
foreach ($phpArray as $item) {
$objArray[] = (object) $item;
}
上面的代码首先使用json_decode()函数将JSON数据转换为PHP数组。接着将数组中的每个项都转换为一个对象,并添加到新的对象数组中。
结论
在PHP中将JSON数据转换为数组或对象非常简单,只需使用json_decode()函数即可。如果需要将JSON数据转换为对象数组,则需要进行一些额外的处理。不管你想做什么,使用JSON格式来进行数据交换都是一个不错的选择。