TP显示1054错误原因剖析!字段名错或表不存在该列?

着实令人佩服,再次碰到示以这般糟糕错误的!这东西实际上就是数据库当中的字段不符合要求,要么是表里面不存在这一列,要么源自你所写的出现错误,简直会把人逼到抓狂。今日我就要拆分剖析、详尽诉说如何整治这...

TP显示1054错误原因剖析!字段名错或表不存在该列?

着实令人佩服,再次碰到示以1054这般糟糕错误的TP!这东西实际上就是数据库当中的字段不符合要求,要么是表里面不存在这一列,要么源自你所写的SQL出现错误,简直会把人逼到抓狂。今日我就要拆分剖析、详尽诉说如何整治这个问题,切勿弄些虚无缥缈、不切实际的理论,直接呈现切实有用的内容!

TP显示1054错误原因是什么

这下边这个糟糕错误,十有八九是你在SQL语句里,把字段名写错了,或者数据库表根本就不存在这一列,像你非要去查询一个“user_age”字段,结果表里边仅仅只有“age”这一列,数据库不跟你发脾气才怪呢!另外还有一种可能性,那就是表名拼写出现了差错,我就曾经碰到过有人把“users”错打成“user”,还一直都找不到问题所在的情况,简直能将人给气得发笑。

另一种情形是,在进行联表查询之际,字段归属处于不清晰的状态。举例来说呀,当同时对用户表以及订单表展开查询的时候,这两个表当中均存在着名为“id”的字段,倘若你并未指定表前缀,那么数据库就会直接陷入迷茫的状态!这情形呀,就如同是身处菜市场大声呼喊“老王”,最终却有八个摊主一道回过头来,此时谁能够知晓你所呼叫的究竟是哪一个呢?

如何快速定位TP显示1054错误

先把完整SQL语句提取出来,将其打印出来,之后,把打印出来的完整SQL语句扔进数据库工具里,开启数据库工具,使其运行一遍!不要再使用TP的链式操作了呀,要直接调用fetchSql()方法,借助这个方法拿到原始SQL。在好些情况下,框架所具有的缓存会对判断起到干扰作用,所以,要记得先清空SQL缓存,然后再进行测试 !

重点查对在模型内所定义的table属性以及字段映射,曾有一回我熬夜直至凌晨三点,最终发觉是于模型里$field属性里多撰写了一个逗号,这般的低级错误着实令人苦恼,提议运用逐段注释法来展开排查,首先将联表查询拆分成单表,把条件从句逐一去除,缩减至最小范围便能够找出元凶 !

TP显示1054具体解决步骤

1. 核对数据库表结构:


   DESC 你的表名;

确认字段名、类型完全匹配,注意大小写和下划线!

2. 检查模型定义:

要保证,没有凭借自己的小聪明去设置$name$field属性,尤其是,千万不要在模型当中写下那些根本不存在的字段。

3. 联表查询必须带表别名:


   ->alias('a')
请你明确一下问题哦,比如对这段内容进行润色、根据其进行拓展等等,这样我才能更准确地按照要求改写。仅这一句不太明确具体的改写方向呢。  ->连接('订单b','a的标识等于b的用户标识') .  (这是按照一般理解简单改写,你看看是否符合需求,若不符合请进一步说明)
   ->field('a.name,b.price')

别偷懒不加别名,否则字段冲突时数据库直接摆烂!

存在这样一个案例,是老子最后放置的,某一回进行排查的时候,发现同事把create_time写成了creat_time,仅仅少了一个字母这般情况,然而却折腾了整个技术组长达两小时时间,像这种伴随着血与泪的教训,你们可得长点心了啊!

你们于解决1054错误之际,还碰到过哪些奇特的做法,赶快在评论区展示出来,让大家见识见识,点赞并转发给那个老是写错SQL的倒霉同事!

分享文章
author

TP显示1054错误原因剖析!字段名错或表不存在该列?

着实令人佩服,再次碰到示以这般糟糕错误的!这东西实际上就是数据库当中的字段不符合要求,要么是表里面不存在这一列,要么源自你所写的出现错误,简直会把人逼到抓狂。今日我就要拆分剖析、详尽诉说如何整治这...