Foros del Web » Programando para Internet » PHP »

Cerrar conexiones a MySQL dentro de funciones

Estas en el tema de Cerrar conexiones a MySQL dentro de funciones en el foro de PHP en Foros del Web. Saludos mosestros, he aquí mi cuestión. Tengo un script principal que abre una conexión a MySQL y la cierra al final del mismo. Cita: <? ...
  #1 (permalink)  
Antiguo 03/08/2007, 13:10
 
Fecha de Ingreso: enero-2002
Mensajes: 4.159
Antigüedad: 22 años, 2 meses
Puntos: 22
Cerrar conexiones a MySQL dentro de funciones

Saludos mosestros, he aquí mi cuestión.

Tengo un script principal que abre una conexión a MySQL y la cierra al final del mismo.

Cita:
<?
// DB Connection
$dbh=mysql_connect ($server, $user, $pass) or die ('Error at connection!: ' . mysql_error());
mysql_select_db ($db_to_use);
.
.
.
Código principal
.
.
.
mysql_close($dbh);
?>
Ahora bién, dentro del código principal hay una función que necesita enviar consultas a la base de datos, para poder hacer esto, abro una conexión a MySQL dentro de la función, para esto utilizo un identificador de vínculo diferente al de la principal.

Cita:
function other_procedure ($sales_info) {

// DB Connection INSIDE the function
$dbh_internal=mysql_connect ($server, $user, $pass) or die ('Error at connection!: ' . mysql_error());
mysql_select_db ($db_to_use);

.
código de la función
.

mysql_close($dbh_internal);
}
El problema viene cuando al final, el script principal intenta cerrar su conexión a la base de datos, marca error 3 como si la conexión hubiese sido cerrada anteriormente.

Por lógica asumo que el problema es que al cerrar su propia conexión la función cierra también la conexión del código principal. Si no cierro la conexión dentro de la función, no marca ningún error.

Mis dudas son:

¿La función está cerrando ambas conexiones?

El script está en un servidor conmpartido y por lo tanto tiene un límite para conexiones abiertas a DB, Si no cierro la conexión que esta dentro de la función y sólo cierro la conexión del script principal, ¿Se cierran ambas?

Espero haberme explicado bién.

Desde ahora, agradezco cualquier ayuda.

Saludos.
  #2 (permalink)  
Antiguo 03/08/2007, 13:50
Avatar de Bellenger  
Fecha de Ingreso: noviembre-2004
Ubicación: En un lugar del Mundo...
Mensajes: 599
Antigüedad: 19 años, 4 meses
Puntos: 4
Re: Cerrar conexiones a MySQL dentro de funciones

Dependiendo de la version del php, este cierra automaticamente una conexcion al servidor despues de ejecutarse la pagina, este es el caso de la versin 5.x, ahora en el tu caso tendrias que hacer una referencia algo asi:
Código PHP:
function conectar($host$bd$usuario$clave){
  
$cn=mysql_connect($host$usuario$clave);
  
$data=mysql_select_db($bd);
  return 
$cn;
}
function 
desconectar(){
  if(isset(
$cn) && $cn!=null){
   
mysql_close($cn);
  }else{
    echo 
'error o si deseas omites esto';
  }

espero te sirva... nos vemos...
__________________
Un Caballero Jura Lealtad. Usa su espada para suprimir la Injusticia No Conoce el Odio y Tampoco el AMOR...
  #3 (permalink)  
Antiguo 03/08/2007, 18:04
 
Fecha de Ingreso: enero-2002
Mensajes: 4.159
Antigüedad: 22 años, 2 meses
Puntos: 22
Re: Cerrar conexiones a MySQL dentro de funciones

Muchísmas grácias Bellenger, lo voy a probar.

Saludos.
  #4 (permalink)  
Antiguo 03/08/2007, 21:58
 
Fecha de Ingreso: enero-2002
Mensajes: 4.159
Antigüedad: 22 años, 2 meses
Puntos: 22
Re: Cerrar conexiones a MySQL dentro de funciones

Creo que he resuelto el problema, aquí les pongo cómo lo hice por si a alguien le sirve.

Antes que nada tengo un archivo externo donde tengo puesto los parámetros de conexión mi base de datos (db_connection_data.php) :

Cita:
<?

$db_name="my_db_name";
$server="localhost";
$user="db_user";
$pass="db_pass";

?>
Muy bién, ahora me conecto a la base de datos en mi script principal

Cita:
<?

require("db_connection_data.php");
// Conexión a la DB
$dbh=mysql_connect ($server, $user, $pass) or die ('Error al conectarse: ' . mysql_error());
mysql_select_db ($db_name);
.
.
.
Código del script principal
.
.
.
mysql_close($dbh);
?>
Muy bién, ahora viene la parte importante, cuando yo me volvía a conectar dentro de la función, la nueva conexión usaba el mismo número de recurso que la conexión en el script principal.

Solución?

En lugar de hacer una nueva conexión dentro de la función, le envío el vínculo de conexión desde el script principal.

Llamada a la función:

Cita:
$valor=nombre_funcion ($dbh);
Función

Cita:
function nombre_funcion($main_connection) {

require("db_connection_data.php");
.
.
.
código de la función
.
.
.
}
Como pueden ver, no abro explícitamente ninguna nueva conexión a la base de datos dentro de la función.

Espero que les sea útil.

Saludos.
  #5 (permalink)  
Antiguo 03/08/2007, 22:40
 
Fecha de Ingreso: enero-2002
Mensajes: 4.159
Antigüedad: 22 años, 2 meses
Puntos: 22
Re: Cerrar conexiones a MySQL dentro de funciones

UNa correción, tambien funciona sin necesidad de enviar el vínculo a la función.
Cita:
function nombre_funcion($argumentos) {

require("db_connection_data.php");
.
.
.
código de la función
.
.
.
}
Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:38.