如何在PHP中检查数据库连接是否已打开?
如何获得此连接的引用?
如何确定它是MySQL,Postgres还是别的什么?
答案 0 :(得分:2)
您必须迭代每个已定义的变量并确定它是否是资源句柄。试试get_defined_vars()。
答案 1 :(得分:2)
理想情况下,您会知道连接保存到的变量。没有它,找到它就变得很麻烦。这意味着你必须循环遍历每个变量并测试每个变量,但是出于任何原因这样做可能会很痛苦,因为它不会在当前范围之外找到变量。您可以使用以下方法循环当前变量:
foreach(get_defined_vars() as $x){
// Code
}
要检查变量是否为有效连接,您可以使用以下代码,它应返回一个整数:
if(mysql_thread_id($connection){
// Connection exists
}
一旦知道了它的连接,就可以使用以下命令返回连接类型,例如mysql。
echo get_resource_type($connection);
答案 2 :(得分:2)
问题的最佳解决方案可能是首先不要忘记数据库连接。
考虑将ORM集成到您的项目中,例如Doctrine或Propel,或者如果您想要更轻量级的内容,请考虑使用Zend_Db之类的DBAL。所有这些解决方案都将类数据库连接封装在类实例中,以确保在必要时它们始终可用于您的代码。
答案 3 :(得分:1)
总的来说,我认为这不可能,至少在某种复杂的解决方法上是这样。例如,您可以循环遍历所有已定义的变量:
foreach(get_defined_vars() as $variable){
if( is_resource($variable) && get_resource_type($variable)=='mysql link' ){
// Found a connection!
var_dump($variable);
}
}
事实上,即使分配给当前范围之外的本地变量,连接仍然可用:
function foo(){
$conn = mysql_connect('localhost', 'test', 'test');
}
foo();
$res = mysql_query('SELECT NOW() AS what_is_the_time');
if( $row = mysql_fetch_assoc($res) ){
var_dump($row);
}
问题是PHP在谈论连接时并不真正关心变量:
// One connection and zero variables!
mysql_connect('localhost', 'test', 'test');
$res = mysql_query('SELECT NOW() AS what_is_the_time');
if( $row = mysql_fetch_assoc($res) ){
var_dump($row);
}
您可以尝试查找有关当前连接的信息:
var_dump(mysql_thread_id());
// int(2696)
...虽然许多功能只会尝试建立一个新连接,如果没有,所以必须注意警告......:
警告:mysql_thread_id():用户''@ localhost'拒绝访问(使用密码:否)
布尔(假)
...除非your configuration实际上允许成功的无凭据连接尝试。
我很确定,无论你想做什么,都可以完全不同的方式完成:)