关于PDO_MYSQL的一个疑问,不知道是不是逻辑BUG

军哥 3月前 221

数据库配置slaves为空的时候, 在db_pdo_mysql.class.php 大约165行的$this->rconf['engine'] (日志里显示的这里)

后来经过多次测试发现: 数据库断开链接后,首次count() $this->rconf却是空的 (就报了未知engine), 重新count()(刷新)一下就有了. 会不会是逻辑BUG?

我觉得是不是应该在__construct()的时候就empty(slaves)然后$this->rconf = $this->conf ?

我最后不得不去掉了wlink和rlink,换成了$this->link单一的方式,虽然一切正常,作为完美主义者,还是向XIUNO老大请教.

   public function count($table, $cond = array()) {
        if(empty($cond) && $this->rconf['engine'] == 'innodb') {  //就是这里
            $dbname = $this->rconf['name'];
  
          $sql = "SELECT TABLE_ROWS as num FROM 
information_schema.tables WHERE TABLE_SCHEMA='$dbname' AND 
TABLE_NAME='$table'";
        } else {
            $cond = db_cond_to_sqladd($cond);
            $sql = "SELECT COUNT(*) AS num FROM `$table` $cond";
        }
        $arr = $this->sql_find_one($sql);
        return !empty($arr) ? intval($arr['num']) : $arr;
    }


最新回复 (10)
  • axiuno 3月前
    0 引用 2
    我看下
  • axiuno 3月前
    0 引用 3
    哦,这个设计就是这样的,按需连接,在任何执行SQL语句的时候,检查连接,如果没有连接,则自动连接。
  • 军哥 3月前
    0 引用 4
    axiuno 哦,这个设计就是这样的,按需连接,在任何执行SQL语句的时候,检查连接,如果没有连接,则自动连接。
    嗯,我明白是按需链接,刚又看了下源码,确实是逻辑BUG, 
    为什么只有在count()这个查询才报错,别的不会,  因为这里的$this->rconf  第一次确实没有赋值到,  是在执行sql_find_one()  也就是到了query()才会if(!$this->rlink  &&  !$this->connect_slave())  return  FALSE;
    这时候$this->rconf才会有赋值. 
  • 军哥 3月前
    0 引用 5
    axiuno 哦,这个设计就是这样的,按需连接,在任何执行SQL语句的时候,检查连接,如果没有连接,则自动连接。
    也就是说  if(empty($cond)  &&  $this->rconf['engine']  ==  'innodb')    在  $this->connect_slave()之前是没有赋值的因此报错了,所以刷新一下,$this->connect_slave()执行过了$this->rconf就有了.
  • 军哥 3月前
    0 引用 6

    好吧,  我的错,  我自作聪明的把index.php里的db_connect()  OR  exit($errstr);  注释掉了......这样逻辑就通了...

    给XIUNO老大添麻烦了.

  • axiuno 3月前
    0 引用 7
    明白了,鸡生蛋的问题了
  • axiuno 3月前
    0 引用 8
    db_connect()    OR    exit($errstr);    注释掉并不会有问题。
  • axiuno 3月前
    0 引用 9

    这样修正下:

  • 军哥 3月前
    0 引用 10
    已get    THKS!
返回
发新帖