关注迅速公众平台

关注迅速公众平台

企业电话:021-64391578

DedeCMS登录提示你的用户不存在的解决方法


  1. 打开mysqli_error_trace.inc文件。

    发现这么一条信息:

    <=============================================>

    <?php  exit();

    /*

    Page: /DedeCMS/uploads/dede/login.php

    Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'admin.*,atype.purviews FROM `dede_admin` 'admin' LEFT JOIN `dede_admintype` atyp' at line 1 <br />Error sql: <font color='red'>SELECT admin.*,atype.purviews FROM `dede_admin` 'admin' LEFT JOIN `dede_admintype` atype ON atype.rank=admin.usertype WHERE admin.userid LIKE 'admin' LIMIT 0,1</font>

    Time2019-04-26 18:49:43

    */

    ?>

    <=============================================>

    大致的意思就是:

     SELECT admin。*,atype.purviews FROM`dede_admin`'admin'LEFT JOIN`dede_admintype` atype ON atype.rank = admin.usertype WHERE admin.userid LIKE'admin'LIMIT 0,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("SELECT admin.*,atype.purviews FROM `#@__admin` admin LEFT JOIN `#@__admintype` atype ON atype.rank=admin.usertype WHERE admin.userid LIKE '".$this->userName."' LIMIT 0,1");

  3. 问题锁定!

         其实看到错误日志的时候,我就猜测是不是Mysql新版本把admin当成保留关键字了,因为在此之前我就试图建立过以admin为表头的数据结构,具体的语句如下:

         >>CREATE TABLE admin(

              id int primary key,

              name varchar(32) NOT NULL,

              password varchar(128) NOT NULL

              );

    <=============================================>

    运行的结果报错:

    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'admin(

    id int primary key,

    name varchar(32) NOT NULL,

    password varchar(128) NOT ' at line 1

    <=============================================>

    后来我吧语句改为:

         >>CREATE TABLE adm(

              id int primary key,

              name varchar(32) NOT NULL,

              password varchar(128) NOT NULL

              );

         运行一次性通过!!!一开始我也不知道原因,然而这一次又是有admin,于是我有了如此这般猜测。。。

  4.      最后,拿着这句话我逐个关键字的去查手册。网上查资料。。。把这段语句单独拿出来做测试。

    结果我把那段代码改成以下形式:

         >>$dsql->SetQuery("SELECT `admin`.*,atype.purviews FROM `#@__admin` `admin` LEFT JOIN `#@__admintype` atype ON atype.rank=admin.usertype WHERE admin.userid LIKE '".$this->userName."' LIMIT 0,1");

    <=============================================>

    实际上就是用``把admin包起来。。。

    特别注意的<<`>>这个是英文的重音符!!!不是单引号!

  5. 最后,保存并退出userlogin.class.php,刷新登录!至此,问题解决!!

  6. 总结:其实问题一开始看起来很复杂,最终解决起来却只要加四个英文重音符。。。分享这个第一当然是能够解决问题!其次我想说的就是要抱有一种分析、猜测、排查的思想。这样,即使是生活中的其他问题也能以同样的方式得以解决。


相关推荐
为何企业都开发微信公众号?
第三方支付余额受限,你真正关心的是什么?
电商何缘热衷“线下开店”?与线上融合是出路
口袋娃娃机开发,夹个娃娃哄女朋友
车载软件开发过程中需要注意哪些事项?

特别申明:本站的主旨在于收集互联网运营相关的干货知识,给运营小伙伴提供便利。 网站所收集到的公开内容均来自于互联网或用户投稿,并不代表本站认同其观点, 也不对网站内容的真实性负责,如有侵权,请联系站长删除

您可以联系我们

彼此协助, 彼此信任

方能将美好的蓝图兑现