mysql 临时表操作查询:table doesn‘t exist

关于 mysql 临时表操作问题

问题描述:

昨天用php原生SQL 创建一个表后,用think-orm去查询该表,一直提示 table doesnt exist.百思不得其解。

问题排解

  1. 用原生SQL查询时,是有结果的,证明该临时表是创建成功的。但是一用Db::table(temporary_tables)->select()就不行了。
  2. 查了一下资料,think-orm对临时表的查询是和普通表一致的,因此不存在think-orm不能查临时表这一说.
  3. 查了一下临时表的概念:
临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间。

这个特点就是我为什么用think-orm查询的时候报错的原因。我的理解:

think-orm 的连接和 $this->db->query的连接不在同一个,产生的会话也不同一个,因此用think-orm去查询this->db->query创建的临时表时,就会报错,因为连接不在同一个。

问题解决

问题解决很简单,统一一下连接即可,因为业务原因,项目以前都是用$this->db->query()操作SQL,后面加入think-orm,因此创建临时表时,用Db::quert()代替$this->db->query()即可。

经验分享 程序员 微信小程序 职场和发展