问题答案
简单封装了一个MySql的类
 
 
  1. class MySql{ 
  2.     private $dbCon; 
  3.     public function __construct(){ 
  4.         $this->dbCon=mysql_connect(...); 
  5.         mysql_select_db("test",$this->dbCon); 
  6.     } 
  7.     public function query($query){ 
  8.         return mysql_query($query,$this->dbCon); 
  9.     } 
  10.     public function closeDb(){ 
  11.         mysql_close($this->dbCon); 
  12.     } 
另外在两个类里面实例化该MySql连接并且定义方法获取数据。
 
 
  1. class UserDao{ 
  2.     private $mysql
  3.     public function __construct(){ 
  4.        $this->mysql=new MySql(); 
  5.     } 
  6.     public function getUsers(){ 
  7.       $query="SELECT * FROM USERS"
  8.       $rs=$this->mysql->query($query); 
  9.       #format data 
  10.       return $result
  11.     } 
  12.     public function __destruct(){ 
  13.         $this->mysql->closeDb(); 
  14.     } 
  15. class NoteDao{ 
  16.     private $mysql
  17.     public function __construct(){ 
  18.        $this->mysql=new MySql(); 
  19.     } 
  20.     public function getNotes(){ 
  21.       $query="SELECT * FROM Notes"
  22.       $rs=$this->mysql->query($query); 
  23.       #format data 
  24.       return $result
  25.     } 
  26.     public function __destruct(){ 
  27.         $this->mysql->closeDb(); 
  28.     } 
然后新建一个test.php页面
如果单独引用任何一个UserDao或者NoteDao都没有问题。但是如果同时引用UserDao和NoteDao来获取数据,则会有
PHP Warning: mysql_close(): 9 is not a valid MySQL-Link resource in 。。。
这样的错误。
为什么呢?
标签: PHP MySQL
答案
mysql_connect是会复用连接的。所以你new出来的两个 MySql 是用的同一个连接(可以var_dump出来看,resource id是同一个)。
mysql_connect第四个参数是是否新建连接,默认FALSE,置成 TRUE 就行了。
 
 
  1. $this->dbCon = mysql_connect($host$user$passwd, TRUE); 
但是我不太建议这么做,本来连接是可以复用的~~~没必要新建。用mysql_connect创建的连接php是会自动释放的,不用调用mysql_colse去关。
举一反三