关于 mysql 临时表操作问题
问题描述:
昨天用php原生SQL 创建一个表后,用think-orm去查询该表,一直提示
table doesn't exist
.百思不得其解。
问题排解
- 用原生SQL查询时,是有结果的,证明该临时表是创建成功的。但是一用
Db::table('temporary_tables')->select()
就不行了。 - 查了一下资料,think-orm对临时表的查询是和普通表一致的,因此不存在think-orm不能查临时表这一说.
- 查了一下临时表的概念:
临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间。
这个特点就是我为什么用think-orm查询的时候报错的原因。我的理解:
think-orm
的连接和$this->db->query
的连接不在同一个,产生的会话也不同一个,因此用think-orm
去查询this->db->query
创建的临时表时,就会报错,因为连接不在同一个。
问题解决
问题解决很简单,统一一下连接即可,因为业务原因,项目以前都是用$this->db->query()
操作SQL
,后面加入think-orm
,因此创建临时表时,用Db::quert()
代替$this->db->query()
即可。