2 changed files with 204 additions and 3 deletions
			
			
		@ -0,0 +1,201 @@ | 
				
			|||
<?php | 
				
			|||
 | 
				
			|||
/** | 
				
			|||
 * 同步推送数据 | 
				
			|||
 */ | 
				
			|||
include_once(dirname(dirname(dirname(__FILE__)))."/library/publicBase.php"); | 
				
			|||
 | 
				
			|||
class syncPushDataTest { | 
				
			|||
    private $table; | 
				
			|||
 | 
				
			|||
    protected $dbflag = 'pushdata'; | 
				
			|||
    private static $db_w = null; | 
				
			|||
    private static $db_r = null; | 
				
			|||
    private static $link; | 
				
			|||
 | 
				
			|||
    private $ismaster = false; | 
				
			|||
 | 
				
			|||
 | 
				
			|||
    public function __construct() { | 
				
			|||
        $obj = new mOrder(); | 
				
			|||
 | 
				
			|||
        $info = $obj->getSyncDataModifyTime(); | 
				
			|||
        var_dump($info); | 
				
			|||
 | 
				
			|||
        if ($info['pdp_modified'] == '0000-00-00 00:00:00') { | 
				
			|||
            $sql = "select min(pdp_modified) as pdp_modified from `pdp_tb_trade`"; | 
				
			|||
            $r = $this->execute($sql, false, true); | 
				
			|||
 | 
				
			|||
            $start = $r['pdp_modified']; | 
				
			|||
        } else { | 
				
			|||
            $start = $info['pdp_modified']; | 
				
			|||
        } | 
				
			|||
 | 
				
			|||
        $end = date("Y-m-d H:i:s", strtotime($start)+7200); // 每次取2小时数据 | 
				
			|||
 | 
				
			|||
        var_dump($start, $end); | 
				
			|||
 | 
				
			|||
 | 
				
			|||
        $list = $this->selectAll('pdp_tb_trade', array('sql'=>'`pdp_modified` >=? and `pdp_modified` <= ?', 'vals'=>array($start, $end)), 'pdp_modified desc'); | 
				
			|||
        var_dump($list); | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    /** | 
				
			|||
     * 解析数据库配置信息 | 
				
			|||
     * 获得数据库的相关连接信息 | 
				
			|||
     * @param sting $dbflag 数据库标识 | 
				
			|||
     * @param boolean $master 是否为主库 | 
				
			|||
     */ | 
				
			|||
    private function parseDbCnf($dbflag,$master=false) { | 
				
			|||
        $configs = parse_ini_file(_Storage_CNF_PATH, true); | 
				
			|||
        $config = $configs[strtolower($dbflag)]; | 
				
			|||
 | 
				
			|||
        if($master)	{ | 
				
			|||
            $host_port = $config['master']; | 
				
			|||
        } else { | 
				
			|||
            $host_port = $config['slave']; | 
				
			|||
        } | 
				
			|||
        $hps = explode(',', $host_port); | 
				
			|||
        $random = rand(0, count($hps)-1); | 
				
			|||
        $hp = $hps[$random]; | 
				
			|||
 | 
				
			|||
        list($host, $port) = explode(':', $hp); | 
				
			|||
 | 
				
			|||
        $cnf = array(); | 
				
			|||
        $cnf['host'] = trim($host); | 
				
			|||
        $cnf['port'] = trim($port); | 
				
			|||
        $cnf['user'] = $master==false ? trim($config['user_r']) : trim($config['user']); | 
				
			|||
        $cnf['pwd'] = $master==false ? trim($config['passwd_r']) : trim($config['passwd']); | 
				
			|||
        $cnf['db'] = trim($config['db']); | 
				
			|||
        return $cnf; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    private function getInstance() { | 
				
			|||
        $dbpara = $this->ismaster==false ? 'db_r' : 'db_w'; | 
				
			|||
 | 
				
			|||
        if(!is_null(self::$$dbpara)) { | 
				
			|||
            self::$link = self::$$dbpara; | 
				
			|||
 | 
				
			|||
            // 判断mysql是否gone away | 
				
			|||
            $status = self::$link->getAttribute(PDO::ATTR_SERVER_INFO); | 
				
			|||
            if($status == 'MySQL server has gone away') { | 
				
			|||
                self::$link = self::$$dbpara = $this->toDb(); | 
				
			|||
            } | 
				
			|||
        } else { | 
				
			|||
            self::$link = self::$$dbpara = $this->toDb(); | 
				
			|||
        } | 
				
			|||
        return self::$link; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    private function initDb($table, $ismaster=false) { | 
				
			|||
        $this->table = $table; | 
				
			|||
        $this->ismaster = $ismaster; | 
				
			|||
 | 
				
			|||
        return self::getInstance(); | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    private function toDb() { | 
				
			|||
        $type = strtolower($this->dbflag); | 
				
			|||
        $cnf = $this->parseDbCnf($this->dbflag, $this->ismaster); | 
				
			|||
 | 
				
			|||
        if (count($cnf)<=0 && $cnf['host'] == '') { | 
				
			|||
            return false; | 
				
			|||
        } | 
				
			|||
        try { | 
				
			|||
            $conn[PDO::ATTR_TIMEOUT] = 3; | 
				
			|||
            if($GLOBALS['pconnect_db']===true) $conn[PDO::ATTR_PERSISTENT] = true; | 
				
			|||
            $conn[PDO::MYSQL_ATTR_INIT_COMMAND] = "SET NAMES UTF8;"; | 
				
			|||
            $db = new PDO('mysql:host='.$cnf['host'].';port='.$cnf['port'].';dbname='.$cnf['db'],$cnf['user'],$cnf['pwd'], $conn); | 
				
			|||
        } catch(PDOException $e) { | 
				
			|||
            //error_log('['.date('Y-m-d H:i:s').'][first-fail]'.implode('|', $cnf).':'.$e->getMessage()."\n", 3, LOG_PATH_BASE.'/mysql/stat_todb_'.date('Y-m-d').'.log'); | 
				
			|||
 | 
				
			|||
            try { | 
				
			|||
                $conn[PDO::ATTR_TIMEOUT] = 3; | 
				
			|||
                if($GLOBALS['pconnect_db']===true) $conn[PDO::ATTR_PERSISTENT] = true; | 
				
			|||
                $conn[PDO::MYSQL_ATTR_INIT_COMMAND] = "SET NAMES UTF8;"; | 
				
			|||
                $db = new PDO('mysql:host='.$cnf['host'].';port='.$cnf['port'].';dbname='.$cnf['db'],$cnf['user'],$cnf['pwd'], $conn); | 
				
			|||
            } catch(PDOException $e) { | 
				
			|||
                //error_log('['.date('Y-m-d H:i:s').'][second-fail]'.implode('|', $cnf).':'.$e->getMessage()."\n", 3, LOG_PATH_BASE.'/mysql/stat_todb_'.date('Y-m-d').'.log'); | 
				
			|||
                return false; | 
				
			|||
            } | 
				
			|||
 | 
				
			|||
            //error_log('['.date('Y-m-d H:i:s').'][second-succ]'.implode('|', $cnf)."\n", 3, LOG_PATH_BASE.'/mysql/stat_todb_'.date('Y-m-d').'.log'); | 
				
			|||
            return $db; | 
				
			|||
        } | 
				
			|||
 | 
				
			|||
        //error_log('['.date('Y-m-d H:i:s').'][first-succ]'.implode('|', $cnf)."\n", 3, LOG_PATH_BASE.'/mysql/stat_todb_'.date('Y-m-d').'.log'); | 
				
			|||
        return $db; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    /** | 
				
			|||
     * 数据库Select多数据 | 
				
			|||
     * 封装标准方法 | 
				
			|||
     * @param string $table 表名 | 
				
			|||
     * @param string $where where条件,比如:array('sql'=>'name1=? and name2=?', 'vals'=>array('name1', 'name2')) | 
				
			|||
     * @param string $orderby 排序,比如:"ctime desc, name asc" | 
				
			|||
     * @param array $limit 读取数量 array(起始数, 数量) | 
				
			|||
     */ | 
				
			|||
    public function selectAll($table, $where=array(), $orderby='', $limit=array()) { | 
				
			|||
        $this->initDb($table); | 
				
			|||
 | 
				
			|||
        try { | 
				
			|||
            $wheresql = ''; | 
				
			|||
            if(!empty($where)) { | 
				
			|||
                $wheresql = "WHERE {$where['sql']}"; | 
				
			|||
                $vals = $where['vals']; | 
				
			|||
            } | 
				
			|||
 | 
				
			|||
            $orderby = "ORDER BY {$orderby}"; | 
				
			|||
            if($orderby === null) $orderby = ''; | 
				
			|||
 | 
				
			|||
            $limitstr = empty($limit) ? '' : "LIMIT {$limit[0]}, {$limit[1]}"; | 
				
			|||
            $sql = "SELECT * FROM `{$this->table}` {$wheresql} {$orderby} {$limitstr}"; | 
				
			|||
            $st = self::$link->prepare($sql); | 
				
			|||
            $res = $st->execute($vals); | 
				
			|||
            if(!$res) return false; | 
				
			|||
 | 
				
			|||
            return $st->fetchAll(PDO::FETCH_ASSOC); | 
				
			|||
 | 
				
			|||
        } catch(PDOException $e) { | 
				
			|||
            return false; | 
				
			|||
        } | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    /** | 
				
			|||
     * 执行SQL查询语句 | 
				
			|||
     * | 
				
			|||
     * 当SQL语句为查询语句时返回执行后的全部数据 | 
				
			|||
     * @access public | 
				
			|||
     * @param string $sql SQL语句 | 
				
			|||
     * @param boolean $all_rows 是否显示全部数据开关,当为true时,显示全部数据,为false时,显示一行数据,默认为true | 
				
			|||
     * @param boolean $is_select 是否为查询语句 | 
				
			|||
     * @return array | void | 
				
			|||
     */ | 
				
			|||
    public function execute($sql, $all_rows=true, $is_select=false) { | 
				
			|||
        $sql = trim($sql); | 
				
			|||
        if(!$sql) return false; | 
				
			|||
 | 
				
			|||
        $this->ismaster = $is_select==false ? true : false; | 
				
			|||
        self::getInstance(); | 
				
			|||
        try { | 
				
			|||
            $st = self::$link->prepare($sql); | 
				
			|||
            $res = $st->execute(); | 
				
			|||
            if(!$res) { | 
				
			|||
                error_log('['.date('Y-m-d H:i:s').']'.$sql.':'.json_encode($st->errorInfo())."\n", 3, LOG_PATH_BASE.'/mysql/execute_'.date('Y-m-d').'.log'); | 
				
			|||
                return false; | 
				
			|||
            } | 
				
			|||
 | 
				
			|||
            if(!$is_select) return $res; | 
				
			|||
            if($all_rows==true) { | 
				
			|||
                return $st->fetchAll(PDO::FETCH_ASSOC); | 
				
			|||
            } else { | 
				
			|||
                return $st->fetch(PDO::FETCH_ASSOC); | 
				
			|||
            } | 
				
			|||
        } catch(PDOException $e) { | 
				
			|||
            return false; | 
				
			|||
        } | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
} | 
				
			|||
 | 
				
			|||
new syncPushDataTest(); | 
				
			|||
					Loading…
					
					
				
		Reference in new issue