2010-08-26 48 views
5

有没有办法让一个PDO连接的唯一连接标识到mysql?获取PDO连接ID

+0

你怎么想这个ID怎么办?比如:比较对象?在MySQL通用查询日志中查找相关条目?实现某种连接池? ...? – VolkerK 2010-08-26 09:08:33

回答

11

试试这样。

print_r($dbh->query('SELECT CONNECTION_ID()')->fetch(PDO::FETCH_ASSOC)); 

您可以使用常规查询来执行CONNECTION_ID()mysql命令来获取连接ID。

See the mySQL manual for more

-1
/* Define Data */ 
    define("DB_HOST","localhost"); 
    define("DB_NAME","DB_NAME"); 
    define("DB_USERNAME","DB_USERNAME"); 
    define("DB_PASSWORD","DB_PASSWORD"); 
    define("DB_CHARSET","utf8"); 


    class conn_db 
    { 
     private static $main_var = NULL; 
     function __construct() 
     { 
    $this->db_host=DB_HOST; 
     $this->db_name=DB_NAME; 
     $this->db_username=DB_USERNAME; 
     $this->db_pass=DB_PASSWORD; 


      if (!self::$main_var) 
     { 
     self::$main_var= new PDO("mysql:host=".$this->db_host.";dbname=". $this->db_name.";charset=".DB_CHARSET."", $this->db_username, $this->db_pass); 

     self::$main_var->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1);  
     self::$main_var->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

     } 

     return self::$main_var; 

    } 

    /*fetch results*/ 
     public static function get_results($getquery,$param=NULL,$type=NULL) 
      { 

       try 
       { 
       $PDO_connect=self::$main_var; 
       $data_query=$PDO_connect->prepare($getquery); 
      if($param!=NULL) 
      { 
       foreach($param as $param_name => &$param_value) 
       { 
       $data_query->bindParam(':'.$param_name, $param_value); 
       } 
      } 
       $data_query->execute(); 
       if($type==NULL) 
       { 
        $fetch_type=PDO::FETCH_OBJ; 

       } 
       if($type=="_A") 
       { 
        $fetch_type=PDO::FETCH_ASSOC; 
       } 
       $fetch_data=$data_query->fetchAll($fetch_type); 
       return $fetch_data; 

       } 
    catch(PDOException $Exc) { 
     echo $Exc->getMessage(); 
       die(); 
        return FALSE; 
        } 


      } 
      /*action results such like insert , update,delete and alter 
      return value last insert row id 
      */ 
      public static function query($getquery,$param=NULL) 
      { 
       try 
       { 
       $PDO_connect=self::$main_var; 
       $data_query=$PDO_connect->prepare($getquery); 


       /*for insertion*/ 
       if (strpos(strtolower($getquery),'insert') !== false) 
       { 
        $data_query->execute($param); 

     return $PDO_connect->lastInsertId(); 
        } 

        /*for update,delete,etc*/ 
        else{ 

          if($param!=NULL) 
      { 
      foreach($param as $param_name => &$param_value) 
       { 
       $data_query->bindParam(':'.$param_name, $param_value); 
       } 
      } 
       $data_query->execute(); 
         return $data_query; 
        } 
       } 

       catch(PDOException $Exc) { 
       echo $Exc->getMessage(); 
       die(); 
      return FALSE;} } 
    } 
    $GLOBALS['conn_db']=new conn_db(); 
+1

只是想法:对于阅读你的答案的其他人来说是否有用,解释为什么它提供了一个唯一的连接标识,而不是可以通过其他连接进行检查,这是什么要求? (我不downvote) – 2017-03-24 15:31:16

+0

代码只有答案是不鼓励的。另外,你的缩进怎么了,* geeeshk *! – 2017-03-24 15:42:25