php 写mysql查询日志

1global.func.php

<?php
function daddslashes($string, $force = 0) {
       
        !defined('MAGIC_QUOTES_GPC') && define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());
        //echo  MAGIC_QUOTES_GPC;
        if(!MAGIC_QUOTES_GPC || $force) {
                if(is_array($string)) {
                        foreach($string as $key => $val) {
                                $string[$key] = daddslashes($val, $force);
                        }
                } else {
                       
                        $string = addslashes($string);
                       
                }
                 
        }
         
        return $string;
}

//设置dcookie
function dsetcookie($var, $value = '', $life = 0, $prefix = 1, $httponly = false) {
        global $cookiepre, $cookiedomain, $cookiepath, $timestamp, $_SERVER;
        $var = ($prefix ? $cookiepre : '').$var;
        if($value == '' || $life < 0) {
                $value = '';
                $life = -1;
        }
        $life = $life > 0 ? $timestamp + $life : ($life < 0 ? $timestamp - 31536000 : 0);
        $path = $httponly && PHP_VERSION < '5.2.0' ? "$cookiepath; HttpOnly" : $cookiepath;
        $secure = $_SERVER['SERVER_PORT'] == 443 ? 1 : 0;
        if(PHP_VERSION < '5.2.0') {
                setcookie($var, $value, $life, $path, $cookiedomain, $secure);
        } else {
                setcookie($var, $value, $life, $path, $cookiedomain, $secure, $httponly);
        }
}

define("LOG_PATH",dirname(__FILE__));
function glogs($logName, $log) {
    
    $file =   $logName . '.log';
 
    $hd = fopen ( $file, 'a+' );
    $log =   '    '  . $log . "\n";
    
    fwrite ( $hd, $log );
    fclose ( $hd );
}

function dblogs($log,$runTime="",$result=1,$type="ms" )
{
    //$runTime为秒
    $typeArr=array("ms"=>"毫秒",'s'=>"秒");
    $resultArr=array("0"=>"error","1"=>"ok");
    
   if(!array_key_exists($result, $resultArr))
    return ;
   
    $dateStr=date("Y-m-d H:i:s");
    $log=$dateStr." ".$resultArr[$result]." ". $log;
    if($type=="ms"){
         $runTime=floatval($runTime)*1000;
        
    }
    else
    { 
        
    }
    $log.= "  [".$runTime." ". $typeArr[$type].  "]";
  
    
    glogs("dblogs", $log);
    
}


?>

2 mysqlHelper.class.php

<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * 
 * 使用前使用
 * MysqlHelper::$charset = 'utf8';
 * MysqlHelper::connect($dbhost, $dbuser, $dbpw, $dbname );
 * 
 * Description of mysqlHelper
 * mysql数据库操作类
 *
 * @author zhoujian
 * @date    2011-08-31
 */
class MysqlHelper {
        private static $querynum = 0;
        private static $link;
        public static $charset;
        
        
        static  function connect($dbhost, $dbuser, $dbpw, $dbname = '', $pconnect = 0, $halt = TRUE) {
            
            
                if(self::$link!=null)//如果已经连接过了,直接返回
                    return ;
                //echo "runned";
                  if(D_BUG) {
                        
                        $sqlstarttime = $sqlendttime = 0;
                        //echo microtime();
                        $mtime = explode(' ', microtime());
                        $sqlstarttime = $mtime[1]+ $mtime[0] ;
                        
 
                }     
                if($pconnect) {
                        if(!self::$link = @mysql_pconnect($dbhost, $dbuser, $dbpw, 1)) {
                                $halt && self::halt('Can not connect to MySQL server');
                        }
                } else {
                        if(!self::$link = @mysql_connect($dbhost, $dbuser, $dbpw, 1)) {
                                $halt && self::halt('Can not connect to MySQL server');
                        }
                }
                if(D_BUG)
                    {
                        $mtime = explode(' ', microtime());
                        $sqlendttime =  $mtime[1] + $mtime[0]  ;
                        $sqlQueryTime = number_format($sqlendttime - $sqlstarttime,6);
                        dblogs("connection to Mysql[".$dbhost."]" , $sqlQueryTime,1);
                         
                         
                    }
                
                if(self::version() > '4.1') {
                        if(self::$charset) {
                                $tmp_Charset=self::$charset;
                                //echo "SET character_set_connection=${tmp_Charset}, character_set_results=${tmp_Charset}, character_set_client=binary";
                                @mysql_query("SET character_set_connection=$tmp_Charset, character_set_results=$tmp_Charset, character_set_client=binary", self::$link);
                        }
                        if(self::version() > '5.0.1') {
                                @mysql_query("SET sql_mode=''", self::$link);
                        }
                }
                if($dbname) {
                        self::select_db($dbname, self::$link);
                        
                }
        }

         static function select_db($dbname) {
                 if(D_BUG) {
                        
                        $sqlstarttime = $sqlendttime = 0;
                        //echo microtime();
                        $mtime = explode(' ', microtime());
                        $sqlstarttime = $mtime[1]+ $mtime[0] ;
                        
 
                }     
                 
                $result=mysql_select_db($dbname, self::$link);
                if($result)
                {
                 if(D_BUG) {
                       // sleep(1);
                        $mtime = explode(' ', microtime());
                        $sqlendttime =  $mtime[1] + $mtime[0]  ;
                        $sqlQueryTime = number_format($sqlendttime - $sqlstarttime,6);   
                        dblogs("Mysql switch to db[".$dbname."]" , $sqlQueryTime,1);
                 }
                }
                else
                {  if(D_BUG)
                    {
                        $mtime = explode(' ', microtime());
                        $sqlendttime =  $mtime[1] + $mtime[0]  ;
                        $sqlQueryTime = number_format($sqlendttime - $sqlstarttime,6);   
                       
                    
                        dblogs("MySQL switch db Error", $sqlQueryTime,0);
                    }
                    self::halt('MySQL switch db Error');
                    
                }   
                 return $result;
                
        }

        static function fetch_array($query, $result_type = MYSQL_ASSOC) {
                return mysql_fetch_array($query, $result_type);
        }

        static function query($sql, $type = '') {
                if(D_BUG) {
                        
                        $sqlstarttime = $sqlendttime = 0;
                        //echo microtime();
                        $mtime = explode(' ', microtime());
                        $sqlstarttime = $mtime[1]+ $mtime[0] ;
                        
 
                }
                $func = $type == 'UNBUFFERED' && @function_exists('mysql_unbuffered_query') ?
                        'mysql_unbuffered_query' : 'mysql_query';
                if(!($query = $func($sql, self::$link)) && $type != 'SILENT') {
                    
                      
                    if(D_BUG)
                    {
                        $mtime = explode(' ', microtime());
                        $sqlendttime =  $mtime[1] + $mtime[0]  ;
                        $sqlQueryTime = number_format($sqlendttime - $sqlstarttime,6);
                        dblogs($sql, $sqlQueryTime,0);
                        
                        }
                        self::halt('MySQL Query Error', $sql);
                }
                if(D_BUG) {
                       // sleep(1);
                        $mtime = explode(' ', microtime());
                        $sqlendttime =  $mtime[1] + $mtime[0]  ;
                        $sqlQueryTime = number_format($sqlendttime - $sqlstarttime,6);
                        dblogs($sql, $sqlQueryTime,1);
                        $explain = array();
                        $info = mysql_info();
                        if($query && preg_match("/^(select )/i", $sql)) {
                                $explain = mysql_fetch_assoc(mysql_query('EXPLAIN '.$sql, self::$link));
                        }
                        $GLOBALS['mysql_debug_query'][] = array('sql'=>$sql, 'time'=>$sqlQueryTime, 'info'=>$info, 'explain'=>$explain);
                }
                self::$querynum++;
                return $query;
        }

        static function affected_rows() {
                return mysql_affected_rows(self::$link);
        }

        static function error() {
                return ((self::$link) ? mysql_error(self::$link) : mysql_error());
        }

        static function errno() {
                return intval((self::$link) ? mysql_errno(self::$link) : mysql_errno());
        }

        static function result($query, $row) {
                $query = @mysql_result($query, $row);
                return $query;
        }

        static function num_rows($query) {
                $query = mysql_num_rows($query);
                return $query;
        }

        static function num_fields($query) {
                return mysql_num_fields($query);
        }

        static function free_result($query) {
                return mysql_free_result($query);
        }

        static function insert_id() {
                return ($id = mysql_insert_id(self::$link)) >= 0 ? $id : self::result(self::query("SELECT last_insert_id()"), 0);
        }

        static function fetch_row($query) {
                $query = mysql_fetch_row($query);
                return $query;
        }

        static function fetch_fields($query) {
                return mysql_fetch_field($query);
        }

        static function version() {
                return mysql_get_server_info(self::$link);
        }

        static function close() {
                return mysql_close(self::$link);
        }

        static function halt($message = '', $sql = '') {
                $dberror = self::error();
                $dberrno = self::errno();
                
                echo "<div position:absolute;font-size:11px;font-family:verdana,arial;background:#EBEBEB;padding:0.5em;\">
                                <b>MySQL Error</b><br>
                                <b>Message</b>: $message<br>
                                <b>SQL</b>: $sql<br>
                                <b>Error</b>: $dberror<br>
                                <b>Errno.</b>: $dberrno<br>
                                </div>";
                exit();
        }
        static function  getQueryNum()
        {
            return self::$querynum;
        }
        static function getTableInfo($tableName)
        {
            
            $ColumnDetail=self::query("select * from $tableName limit 1 ");
            //echo "select * from $tableName limit 1";
            $num=mysql_num_fields($ColumnDetail);
 
            echo '<table width="472" height="80"  cellpadding="0" cellspacing="0"  
                 bordercolordark="#000" bordercolorlight="#000000">';
           
              for($i=0;$i<$num;$i++)
            {
               echo '<tr>
                    <td width="80">'.mysql_field_name($ColumnDetail,$i).'</td>
                    <td width="386">'.mysql_field_type($ColumnDetail,$i)." ". mysql_field_flags($ColumnDetail,$i)." ".mysql_field_len($ColumnDetail,$i).'</td>
                  </tr>';
             }
           echo '</table>';
            
            
            

            
        }
     
}

?>

3 index.php

<?php
require_once './common.inc.php';
@header('Content-type: text/html;charset=UTF-8');

//$nextWeek = time() + (7 * 24 * 60 * 60);
//                   // 7 days; 24 hours; 60 mins; 60secs
//echo 'Now:       '. date('Y-m-d') ."\n";
//echo 'Next Week: '. date('Y-m-d', $nextWeek) ."\n";

MysqlHelper::$charset = 'utf8';
MysqlHelper::connect($dbhost, $dbuser, $dbpw, $dbname );
$query=MysqlHelper::query("SELECT id,name,concat(catpath,id,'-') as abspath FROM categorys where id<>1 order by abspath");

$categoryArr=array();


 while ($rs = MysqlHelper::fetch_array($query)){
                            $categoryArr[$rs['id']] = $rs;
 }
 
$option="";
$tmp_selected="";//是否选中
foreach($categoryArr as $row){
     //echo count ( explode ( '-', $row ['catpath'] ) );
     $space = str_repeat ( '  ', count ( explode ( '-', $row ['abspath'] ) ) );
   
       $tmp_selected=(isset($_GET['cateid']) && $_GET['cateid']== $row ['id'])?"selected='selected'":"";

     $option .= '<option value="' . $row ['id'] . '"'. $tmp_selected.' >' . $space . $row ['name'] . '</option>';
 }
 unset($tmp_selected);

 
 
print <<<EOF
 <select name="cateid">
$option
</select>
EOF
 

?>
 

<?php
  require_once './foot.php';

?>

4 生成的日志

    2011-10-31 16:16:41 ok connection to Mysql[localhost]  [3.241 毫秒]
    2011-10-31 16:16:41 ok Mysql switch to db[tt]  [0.787 毫秒]
    2011-10-31 16:16:41 ok SELECT id,name,concat(catpath,id,'-') as abspath FROM categorys where id<>1 order by abspath  [1.066 毫秒]
    2011-10-31 16:16:41 ok connection to Mysql[localhost]  [1.78 毫秒]
    2011-10-31 16:16:41 ok Mysql switch to db[tt]  [0.373 毫秒]
    2011-10-31 16:16:41 ok SELECT id,name,concat(catpath,id,'-') as abspath FROM categorys where id<>1 order by abspath  [0.782 毫秒]
    2011-10-31 16:16:41 ok connection to Mysql[localhost]  [1.964 毫秒]
    2011-10-31 16:16:41 ok Mysql switch to db[tt]  [0.531 毫秒]
    2011-10-31 16:16:41 ok SELECT id,name,concat(catpath,id,'-') as abspath FROM categorys where id<>1 order by abspath  [0.648 毫秒]