2011-06-16 67 views
1

我在一个他们不想让我访问主数据库的站点上实现一个脚本,所以他们为我创建了第二个数据库。但是,在调用连接到我的数据库从index.php(他们有一个连接到他们的数据库)的函数后,它看起来像他们的连接丢失。这是正常的吗?是否有可能使用mysql_connect()建立第二个连接而不干扰第一个连接?顺便说一句,我从不使用mysql_close。PHP:Mysql连接

这是我的连接功能

public function connect() { 
     $link = mysql_connect('localhost', 'user', 'pwd'); 
     if (!$link) { 
      die('Could not connect: ' . mysql_error()); 
     } 
     mysql_select_db('database'); 

     return $link; 
    } 

谢谢!

回答

1

当然,只要确保你使用您创建$link变量,如在mysql_select_db()呼叫时,mysql_error()电话和其他任何地方使用mysql_*功能。

2

PHP的mysql_函数系列都采用可选参数link,其中您指定要为给定函数使用哪个链接。看看这里mysql_error的文档(作为一个例子):

麻烦的是,许多新开发谁是直接在他们的代码中调用mysql_connect而不是使用包装数据库类(或者甚至更好,PDO)将趋向不提供该可选参数。如果您不提供link参数,会发生什么情况是该函数会假定您要使用最近创建的链接 - 在本例中为链接。

您可以在自己的函数纠正这个问题:

public function connect() { 
     $link = mysql_connect('localhost', 'user', 'pwd'); 
     if (!$link) { 
      die('Could not connect: ' . mysql_error($link)); 
     } 
     mysql_select_db('database', $link); 

     return $link; 
    } 

..但是,这并不助阵的项目中,开发商很可能呼吁mysql_query所有的地方,而没有经过其他地区链接,所以它会默认为您的较新链接。解决这个问题的最佳方法是不用修复所有其他代码,而是使用PDO来访问其他数据库。

可能被影响的代码,即使其他开发商都经过link争论的另一件事,就是你不使用new_link说法,当你调用mysql_connect。你基本上是在“窃取”他们的链接!如果他们小心始终使用link论据mysql_query,你可以使用new_link参数,以确保你不劫持自己的数据库连接:

public function connect() { 
     $link = mysql_connect('localhost', 'user', 'pwd', true); 
     if (!$link) { 
      die('Could not connect: ' . mysql_error($link)); 
     } 
     mysql_select_db('database', $link); 

     return $link; 
    } 
0

退房的post by sedativchunk。他创建了一个PHP类,允许您打开多个连接。但是,我自己并没有使用它。