灰太狼
- 灰太狼 回答了问题 MySQL 误操作后如何快速回滚?
1:检查mysql是否开启了binlog ON是开启状态
2:检查 my.cnf文件的 log-bin目录,这个目录是记录回滚操作记录文件。
3:使用 #mysqlbinlog log-bin目录(如上2)/mysql-bin.000001 >/usr/local/log/mysql-bin-000001.sql
例如:#mysqlbinlog /usr/local/log/mysql-bin.000001 > /usr/local/log/mysql-bin-000001.sql 备注:(mysqlbinlog --start-position=120 --stop-position=2174941 操作点参数)
4:打开生成的 /usr/local/log/mysql-bin-000001.sql 文件,把里面的delete, create dababase,create table等无关操作需要删掉,自己一点点排查下,或用操作点--start-position 来过滤。
5:过滤完毕 /usr/local/log/mysql-bin-000001.sql 后执行
#mysql56 -uroot -p </usr/local/log/mysql-bin-000001.sql
6:去查询表,发现数据回来了。
用这个命令 有两个前提:
1、正确安装 yii2-faker 这个扩展
php composer.phar require --prefer-dist yiisoft/yii2-faker
2、正确配置这个扩展,在 console.php 中
'controllerMap' => [ 'fixture' => [ 'class' => 'yii\faker\FixtureController', ], ],
依次检查
哦,命令是在子类
yii\faker\FixtureController
实现里的哈,是指子类'class' => 'yii\faker\FixtureController'
,Yii 默认是'class' => 'yii\console\controllers\FixtureController'
,哎,没注意到这里。可以了,感谢!我觉得按分层架构思想来处理,不应该是有数据模型层来处理转换,应该是创建一个filter(继承yii的filter)行为对数据进行转化,并且通过策略选择映射模式,这样,封装一个filter,就可以在所有模型和控制器提交之前做处理,只需要根据提交的不同表进行策略映射就行了。底层模型不要改动,ar模型只接受表映射的字段。如果上层提交过来的结构不满足,问题是出在上层,不应该要模型做改动。
- 灰太狼 2019-06-11 已签到连续签到1天,获得了5个金钱
控制器里
$this-render('a.php')
a.php
模版里写<?php $this->render('b.php') ?>
或
控制器里
$this->render('index.php')
index.php
模版里写<?php $this->render('a.php') $this->render('b.php') ?>
- 灰太狼 回答了问题 PHP 实现的双向链表,数据存放原理?
- 灰太狼 2019-06-01 已签到连续签到4天,获得了20个金钱
- 灰太狼 回答了问题 PHP 实现的双向链表,数据存放原理?
【栈】后进先出,先进后出,这就是典型的“栈”结构。 任何数据结构都是对特定应用场景的抽象,数组和链表虽然使用起来更加灵活,但却暴露了几乎所有的操作,难免会引发错误操作的风险。 当某个数据集合只涉及在一端插入和删除数据,并且满足后进先出、先进后出的特性,我们就应该首选“栈”这种数据结构。 栈主要包含两个操作,入栈和出栈。 实际上,栈既可以用数组来实现,也可以用链表来实现。用数组实现的栈,我们叫作顺序栈,用链表实现的栈,我们叫作链式栈。 对于出栈操作来说,我们不会涉及内存的重新申请和数据的搬移,所以出栈的时间复杂度仍然是O(1)。但是,对于入栈操作来说,情况就不一样了。当栈中有空闲空间时,入栈操作的时间复杂度为 O(1)。但当空间不够时,就需要重新申请内存和数据搬移,所以时间复杂度就变成了O(n)。
PHP对象在内存堆栈中的分配 对象在PHP里面和整型、浮点型一样,也是一种数据类,都是存储不同类型数据用的, 在运行的时候都要加载到内存中去用,那么对象在内存里面是怎么体现的呢?内存从逻辑上说大体上是分为4段,栈空间段、堆空间段、代码段、初始化静态段,程序里面不同的声明放在不同的内存段里面。 数据段(data segment)通常是指用来存放程序中已初始化且不为0的全局变量如:静态变量和常量 代码段(code segment / text segment)通常是指用来存放程序执行代码的一块内存区域,比如函数和方法 栈空间段是存储占用相同空间长度并且占用空间小的数据类型的地方,比如说整型1,10,100,1000,10000,100000 等等,在内存里面占用空间是等长的,都是64 位4 个字节。 那么数据长度不定长,而且占有空间很大的数据类型的数据放在那内存的那个段里面呢?这样的数据是放在堆内存里面的。 栈内存是可以直接存取的,而堆内存是 不可以直接存取的内存。对于我们的对象来数就是一种大的数据类型而且是占用空间不定长的类型,所以说对象是放在堆里面的,但对象名称是放在栈里面的,这样通过对象名称就可 以使用对象了。$p1 就是我们实例出来的对象名称,同理,$p2,$p3 也是我们实例出来的对象名称,一个类可以实例出多个对象,每个对象都是独立的,上面的代码相当于实例出来3 个人来,每个人之间是没有联系的,只能说明他们都是人类,每 个人都有自己的姓名,性别和年龄的属性,每个人都有说话和走路的方法,只要是类里面体 现出来的成员属性和成员方法,实例化出来的对象里面就包含了这些属性和方法。