众所周知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; }
代码1:for循环批量插入100W数据<?php set_time_limit(0); $servername = "localhost"; $username = "root"; $password ...
001源码:/* * $xml_str是xml字符串 */ function xmltoarray($xml_str) { //禁止XML实体扩展攻击 libxml_disable_entity_loader(true); //拒绝包含...
主要原理是通过PHP创建多个子进程,在子进程中发送进程闹钟信号,然后再监听闹钟信号中继续发送闹钟信号。同时通过父进程设置非阻塞运行。代码如下:<?php /** * 订单任务 */ class Order { &n...
将jsonp转为PHP数组和对象。/** * jsonp转数组|Jsonp转json * @param string $jsonp jsonp字符串 * @param bool $as...
最近在项目中处理一个关于商品数据重复需要删除多余的商品记录,但是删除一条商品必然要把关联的其他表商品的id和其他商品信息更换为正确的,删除一个商品记录,同时要去修改100多张表的关联商品数据,在项目中引用了tp orm 1.2版本,由于项目是php5.6版本,没法使用最新orm,在代码中每处理1个商...
当我们使用php爬虫采集网站时经常会遇到内容使用ajax异步加载。一般采取的方案是PHP模拟再请求api接口获取数据,但是有时候前端js加密非常麻烦,我们需要将js的加密方法转换为php方法方便curl请求。当然通过了解我们可以通过3种方案解决。第一种:使用phpv8js扩展执行js代码。(pecl...