2018年7月

基本思路是禁止各种方式实例化这个class,必须只能通过一个方法,比如getInstance方法,而且这个方法要确保只生成一次实例。
在PHP里,还要防止各种其他Magic Methods魔术方法生成该实例。

看代码:

- 阅读剩余部分 -

MySQL 5.7.4之前的版本:

ALTER IGNORE TABLE mytbl ADD UNIQUE (columnName);

For MySQL 5.7.4 or later:

ALTER TABLE mytbl ADD UNIQUE (columnName);

这个IGNORE主要目的是,因为表中可能已经存在了数据,而且会有重复数据。
但MySQL 5.7.4 之后再用IGNORE关键字,会报错。所以增加UNIQUE限制之前,要先确保数据没有重复。

还有一个小特色,甚至你可以为这个constraint加个名字:

ALTER TABLE myTable
  ADD CONSTRAINT constraintName 
    UNIQUE (columnName);

try catch的一点小体会这个日记里,写到了,如果数据库保存失败 ,save()仅仅返回一个false,因此要手动抛出异常。

但我现在遇到一个情况,就是在save()的时候,会报错,因为某个字段里有特殊字符,又没有做转义处理,就会报错。

而且如果是一个for loop里报错,这会导致for loop退出的,因此要catch这个错误,但不要throw,一旦throw,这个for loop还是中断了。仅仅catch这个错误,然后在console里写一个提示,即可。

好,问题来了:什么时候save()会报错呢?什么时候不会报错,但仅仅返回一个false

遇到一个问题,需要读取本地服务器里的文件,并且用PHPOffice解析出来。

问题来了,总是file not exist, 这他妈。。。。

后来发现是路径格式的问题,也就是说,PHPOffice\Phpspreadsheet这个库里的load函数,本质上是PHP的fopen函数,而这个又显然是C语言里的fopen函数的封装。至于PHP在封装的过程中是否做了什么优化,不得而知,但是呢,参数是文件路径或一个url,这就要求必须符合Windows的文件路径,或者Unix文件格式。

而在保存的过程中,死活是不能提取出合适的文件路径的,各种不对。于是我就放弃了直接在PHP代码里解决文件路径格式的问题。于是在console里写代码,传递的参数是Unix格式的路径,这就好了。

所以一方面,不能死板,二方面还是要多思考。这个解决方法是洗澡的时候想出来了。还是要多投入时间和精力。

出现这个问题,通常是php.ini的问题,当然,肯定也和Nginx或Apache的配置有关。
php.ini里有2个地方和这个有关:

671行 post_max_size = 50M
824行 upload_max_filesize = 50M

创建一个db:

CREATE DATABASE myDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

查看一个table里有多少行:

SELECT COUNT(*) FROM myTable;