DedeCMS登录提示你的用户不存在的解决方法!本人Apache2.4+mysql8.0.11+php7的开发环境。在安装DedeCMS后发现无论如何都登录不上管理员后台,一直提示你的用户不存在。。。一开始查了网上的一些解决方法,大致为以下两种:>>查看数据库dede_admin表中数据是否丢失>>数据库配置文件common.inc.php中配置数据是否正确虽然不排除这两种可能性,但是,以上两种情况我都没有出现。。。关于这两种方法可以自行查找,就不在这里做说明了。可是,当我在查看common.inc.php配置文件的时候,我发现data目录下多了个mysqli_error_trace.inc文件。看到error,我第一想到的就是:这是个错误日志文件。于是我打开看了下这个文件,按照这个文件,我的问题终于是解决了。接下来我具体介绍下我是如何解决问题的。
工具/原料
userlogin.class.php
方法/步骤
1、打开mysqli_error_trace饱终柯肢.inc文件。发现这么一条信息:<=============================================><?p茑霁酌绡hpexit();/*Page:/DedeCMS/uploads/dede/login.phpError:YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear'admin.*,atype.purviewsFROM`dede_admin`'admin'LEFTJOIN`dede_admintype`atyp'atline1<br/>Errorsql:<fontcolor='red'>SELECTadmin.*,atype.purviewsFROM`dede_admin`'admin'LEFTJOIN`dede_admintype`atypeONatype.rank=admin.usertypeWHEREadmin.useridLIKE'admin'LIMIT0,1</font>Time2019-04-2618:49:43*/?><=============================================>大致的意思就是:SELECTadmin。*,atype.purviewsFROM`dede_admin`'admin'LEFTJOIN`dede_admintype`atypeONatype.rank=admin.usertypeWHEREadmin.useridLIKE'admin'LIMIT0,1这里的SQL语法错误!报错的页面是:/DedeCMS/uploads/dede/login.php
2、于是我就把login,php文件打开。根据MVC思想,业务逻辑一般会放到控制器去处理,所以我在文件中找到了几个require_once:>>require_once(dirname(__FILE__).'/../include/common.inc.php');>>require_once(DEDEINC.'/userlogin.class.php');>>require_once(DEDEDATA.'/admin/config_update.php');因为登录失败,所以我猜测是登录验证失败导致。于是我打开以上三个文件,发现其中serlogin.class.php文件中有执行了这么一段SQL语句:>>$dsql->SetQuery("SELECTadmin.*,atype.purviewsFROM`#@__admin`adminLEFTJOIN`#@__admintype`atypeONatype.rank=admin.usertypeWHEREadmin.useridLIKE'".$this->userName."'LIMIT0,1");
3、问题锁定!其实看到错误日志的时候,我就猜测是不是Mysql锪者谧桁新版本把admin当成保留关键字了,因为在此之前我就试图建立过以ad罪焐芡拂min为表头的数据结构,具体的语句如下:>>CREATETABLEadmin(idintprimarykey,namevarchar(32)NOTNULL,passwordvarchar(128)NOTNULL);<=============================================>运行的结果报错:ERROR1064(42000):YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear'admin(idintprimarykey,namevarchar(32)NOTNULL,passwordvarchar(128)NOT'atline1<=============================================>后来我吧语句改为:>>CREATETABLEadm(idintprimarykey,namevarchar(32)NOTNULL,passwordvarchar(128)NOTNULL);运行一次性通过!!!一开始我也不知道原因,然而这一次又是有admin,于是我有了如此这般猜测。。。
4、最后,拿着这句话我逐个关键字的去查手册。网上查资料。。。把这段语句单独拿出来做测试。结果我把那段代码改成以下形式:>>$dsql->SetQuery("SELECT`admin`.*,atype.purviewsFROM`#@__admin``admin`LEFTJOIN`#@__admintype`atypeONatype.rank=admin.usertypeWHEREadmin.useridLIKE'".$this->userName."'LIMIT0,1");<=============================================>实际上就是用``把admin包起来。。。特别注意的<<`>>这个是英文的重音符!!!不是单引号!
5、最后,保存并退出userlogin.class.php,刷新登录!至此,问题解决!!
6、总结:其实问题一开始看起来很复杂,最终解决起来却只要加四个英文重音符。。。分享这个第一当然是能够解决问题!其次我想说的就是要抱有一种分析、猜测、排查的思想。这样,即使是生活中的其他问题也能以同样的方式得以解决。