本文主要记录在使用ThinkPHP过程中遇到的各种常见的错误:
SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction
导致这个错误出现的原因主要有2个: 频繁读写数据
事务锁
-
频繁读写数据解决办法:
- 使用
memcache
或者redis
缓存数据, 减轻数据库读写次数 - 根据业务逻辑, 拆分数据表, 让读写速度更快
- 使用
-
事务锁:
在开启A事务还没有结束的时候,又开启了B事务, 还操作了同一个表, 就会出现这样的错误
- 修改mysql的配置文件
my.ini
, 怎么改?百度去吧..(作为一个开发者,不建议这么干, 运维也不一定同意) - 优化代码:
取消其中一个事务
- 修改mysql的配置文件
model data not found
使用 findOrFail
或 selectOrFail
方法如果没有查询到数据就会抛出这个异常
- 解决办法:
- 使用
try...catch
捕获这个异常 - 使用
find
和select
方法,然后判断返回值
undefind db type
看ThinkPHP的源码发现, 连接数据库的时候就已经抛出异常了,一般出现这个错误,肯定是跨库操作导致
Numeric value out of range
出现这个错误原因有2个 int
类型超过最大上限,使用 unsigned
但是存储了负数
-
int 类型最大是有上限的, 如果存一个特别大的数值就会存不进去, 这个遇见的几率较小
- 修改字段的数据类型
-
由于
unsigned
约束不能存储负数, 如果在有这个约束的时候还存储负数就会存不进去- 修改 制度约束