众所周知MyISAM引擎不支持事务,但是我只是知道不支持事务,并未测试具体的表现是什么,测试代码如下:
try
{
//开启事务
Db::startTrans();
//(1).id为1的数据name字段修改为gao
$isUpdate1 = Db::table('member')->where(['id' => 1])->update([
'name' => 'gao1'
]);
if (!$isUpdate1)
{
throw new Exception('更新第1条数据失败,事务已经回滚.');
}
//(2).id为2的数据name字段修改为chen
$isUpdate2 = Db::table('member')->where(['id' => 2])->update([
'name' => 'chen'
]);
if (!$isUpdate2)
{
throw new Exception('更新第2条数据失败,事务已经回滚.');
}
// 提交事务
Db::commit();
}
catch (Exception $exception)
{
//事务回滚
Db::rollback();
echo $exception->getMessage() . PHP_EOL;
}通过测试发现MyISAM直接忽视开启事务,提交事务,回滚事务,上面的代码相当于你没有写开启事务,提交事务,事务回滚的效果一样,只要有数据库操作一律直接执行。完全等同于下面的代码:
try
{
//(1).id为1的数据name字段修改为gao
$isUpdate1 = Db::table('member')->where(['id' => 1])->update([
'name' => 'gao1'
]);
if (!$isUpdate1)
{
throw new Exception('更新第1条数据失败');
}
//(2).id为2的数据name字段修改为chen
$isUpdate2 = Db::table('member')->where(['id' => 2])->update([
'name' => 'chen'
]);
if (!$isUpdate2)
{
throw new Exception('更新第2条数据失败');
}
}
catch (Exception $exception)
{
echo $exception->getMessage() . PHP_EOL;
} <!doctype html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <bod...
md5/sha1+salt方式是目前各大cms常用的加密方式,虽然salt安全,但是各大md5网站也在研究这个方向,那么我们应该选择password_hash动态hash来助力,一种密码有多种hash结果.看代码模拟登陆.<?php //01.注册 $user ='zhang...
逛公众号文章看到文章"php实现事件监听与触发的方法,你用过吗?",我就好奇了,php又不是asp.net的webform,哪里来的服务端事件监听。于是学习了一波。先看下监听类:class Event { /** &nbs...
(1)swoole启动的主进程是master进程负责全局管理,然后master进程会再fork一个manager进程。(2)manager进程开始统一管理进程创建回收管理。(3)manager进程根据设置的worker_num和task_worker_num来创建work进程和task进程因此启动s...
<?php /** * @throws Exception */ function curl() { throw new \Exception('err...
php7.1引入了PHP异步信号处理函数pcntl_async_signals() 来处理阻塞问题。在php7之前信号处理方式有2种,第一种是基于ticks来每执行一行代码来触发执行信号监听,第二种是直接while(true){ //监听信号 }第一种方式如果某行的代码阻塞时间较长会影响...