/** * 重写MYSQL中的QUERY,对SQL语句进行监控 * @param string $sql */ public function query($sql, $is_set_default = true) { $this->get_link_id($sql); //link_id获取 $InitPHP_conf = InitPHP::getConfig(); if ($InitPHP_conf['is_debug'] == true) { $start = microtime(); } $query = $this->db->query($sql); if ($InitPHP_conf['is_debug'] == true) { $end = microtime(); } //sql query debug if ($InitPHP_conf['is_debug'] == true) { $k = count($InitPHP_conf['sqlcontrolarr']); $InitPHP_conf['sqlcontrolarr'][$k]['sql'] = $sql; $costTime = substr($end - $start, 0, 7); $InitPHP_conf['sqlcontrolarr'][$k]['queryTime'] = $costTime; $InitPHP_conf['sqlcontrolarr'][$k]['affectedRows'] = $this->affected_rows(); InitPHP::setConfig('sqlcontrolarr', $InitPHP_conf['sqlcontrolarr']); } if ($this->db->error()) { InitPHP::initError($this->db->error()); } if ($is_set_default) { $this->set_default_link_id(); } //设置默认的link_id return $query; }
/** * 获取link_id 数据库链接资源符 * @param string $sql SQL语句进行分析 * @return object */ protected function get_link_id($sql = "") { $InitPHP_conf = InitPHP::getConfig(); $db_type = $InitPHP_conf['Db'][$this->dbModel]['db_type']; //如果sql语句为空,则直接返回link_id if ($sql == "") { $this->db->link_id = self::$dbArr[$this->dbModel]['link_id']; return $this->db->link_id; } if (isset($InitPHP_conf['issqlcontrol']) && $InitPHP_conf['issqlcontrol'] == 1) { $InitPHP_conf['sqlcontrolarr'][] = $sql; InitPHP::setConfig('sqlcontrolarr', $InitPHP_conf['sqlcontrolarr']); } if ($db_type == 1) { //主从 if ($this->is_insert($sql)) { $this->db->link_id = self::$dbArr[$this->dbModel]['master']['link_id']; } else { $this->db->link_id = self::$dbArr[$this->dbModel]['salver']['link_id']; } } else { $this->db->link_id = self::$dbArr[$this->dbModel]['link_id']; } return $this->db->link_id; }
/** * 数据库语句监控器-开始点 * 使用方法:$this->getUtil('sqlcontrol')->start(); * @return string */ public function start() { InitPHP::setConfig('issqlcontrol', 1); }