Foros del Web » Programando para Internet » PHP »

Dudas con conexion mysql

Estas en el tema de Dudas con conexion mysql en el foro de PHP en Foros del Web. Hola Yo tengo varios scrpits independientes en cada pagina (varios querys) y todos conectan a la misma BBDD... mi duda es: ¿con una sola conexion ...
  #1 (permalink)  
Antiguo 22/02/2006, 09:02
MindPaniC
Invitado
 
Mensajes: n/a
Puntos:
Dudas con conexion mysql

Hola

Yo tengo varios scrpits independientes en cada pagina (varios querys) y todos conectan a la misma BBDD... mi duda es:

¿con una sola conexion ya vale para todas las de la misma pagina?


Es que yo tengo en cada script una conexion a la BBDD y como es la misma BBDD pues he pensado que quizas sea innecesario abrir varias conexiones al mismo sitios aunque sean scripts separados, pero que estan en la misma página.

¿como es mejor, rapido y seguro?

saludos
  #2 (permalink)  
Antiguo 22/02/2006, 09:09
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 5 meses
Puntos: 11
Basta con una conexión por página, incluso si te conectas a 2 bd distintas.
  #3 (permalink)  
Antiguo 22/02/2006, 09:09
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 18 años, 6 meses
Puntos: 19
Cita:
¿con una sola conexion ya vale para todas las de la misma pagina?
Sí. Lo mejor es tener un fichero php que te haga la conexión e incluirlo en los php que trabajen con bases de datos.
  #4 (permalink)  
Antiguo 22/02/2006, 09:11
MindPaniC
Invitado
 
Mensajes: n/a
Puntos:
os referis a un include al script de conexion???

o os referis a crear una variable que se use en todos los scripts??
  #5 (permalink)  
Antiguo 22/02/2006, 09:15
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 5 meses
Puntos: 11
Cuando colocas varios script dentro de uno, en realidad sólo tienes 1 script, y todas las variables son accesibles dentro del script. Al hacer una inclusión de un archivo que realiza la conexion estas agregando ese codigo a tu script o pagina y por tanto, las variables que creas en ese script son tambien accesibles a todo el script.
  #6 (permalink)  
Antiguo 22/02/2006, 09:20
MindPaniC
Invitado
 
Mensajes: n/a
Puntos:
ok includes encontes, gracias.
  #7 (permalink)  
Antiguo 22/02/2006, 09:23
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
os referis a un include al script de conexion???
Se refieren o así debes hacerlo.

Si tu usas una variable asignada a tu "link" de conexión ($link=mysql_connect() ..) sólo te servirá para la ejecución de ese scritp. Recuerda que PHP "mata" toda variable al terminar la ejecución del script. No sirve tampoco propagar un "$link" de conexión ("resource ID") en una variable de sesión.

Es "Mysql" si usas conexiones persistenes por ejemplo quien se encarga en función del cliente y caché que hace de consultas el que re-conecta de nuevo si se perdió la conexión o inicia una nueva, pero igualmente todo script que use acceso a tus BBDD debe hacer una vez al menos "mysql_pconnec()" (sería una conexión persistente) o mysql_connect() (conesión no persistente .. lo normal en la mayoría de casos).

Cita:
claudiovega
Basta con una conexión por página, incluso si te conectas a 2 bd distintas.
En ese caso te hace falta definir dos "links" de conexión diferentes y usarlos por separado. Sólo PHP "asume" y usa el link de conexión en curso si te mueves en la misma conexión. (por eso normalmente no usamos el 2° parámetro de las funciones _connect() .. _query() y demás .. por qué usamos una sóla conexión y dejamos que PHP use la que creó).

Me refiero a ..

$link_BBDD1 = mysql_connect(...);
mysql_select_db("...",$link_BBDD1);

$link_BBDD2 = mysql_connect(...);
mysql_select_db("...",$link_BBDD2);

Y así usar una u otra BBDD (aunque estén el mismo servidor Mysql o en diferente) por su $link de conexión creado:

mysql_query("....",$link_BBDD1) .. etc.


Un saludo,
  #8 (permalink)  
Antiguo 22/02/2006, 09:27
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 5 meses
Puntos: 11
Yo decía en el lenguaje sql se puede hacer la diferencia, asi:

$link=mysql_connect("server","user","pass");
$sql="select * from base1.tabla1";
mysql_query($sql,$link);
$sql="select * from base2.tabla1";
mysql_query($sql,$link);
  #9 (permalink)  
Antiguo 22/02/2006, 09:29
MindPaniC
Invitado
 
Mensajes: n/a
Puntos:
Un gran explicacion cluster, creo que hare un scrip para cada conexión dependiendo de lal BBDD que utilize, los guardare fuera del html_public como hago con mis otros includes de html y partes de diseño y asi estaran protegidos ya que no son accesibles desde el exterior

saludos
  #10 (permalink)  
Antiguo 22/02/2006, 09:52
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por claudiovega
Yo decía en el lenguaje sql se puede hacer la diferencia, asi:

$link=mysql_connect("server","user","pass");
$sql="select * from base1.tabla1";
mysql_query($sql,$link);
$sql="select * from base2.tabla1";
mysql_query($sql,$link);
Ok .. ok .. pero así sólo estás usando una conexión a una Base de datos concreta .. Lo que haces es usar "N tablas" o ejecutar N consultas a esa BBDD conectada.

Por mi parte ententí que te referías a otras Base de datos (unamos criterios: BBDD != a "tablas" de una BBDD).

Un saludo,

Última edición por Cluster; 22/02/2006 a las 10:23
  #11 (permalink)  
Antiguo 22/02/2006, 09:58
MindPaniC
Invitado
 
Mensajes: n/a
Puntos:
cierto no es !=
  #12 (permalink)  
Antiguo 22/02/2006, 10:01
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por MindPaniC
Un gran explicacion cluster, creo que hare un scrip para cada conexión dependiendo de lal BBDD que utilize, los guardare fuera del html_public como hago con mis otros includes de html y partes de diseño y asi estaran protegidos ya que no son accesibles desde el exterior

saludos
No entendí el problema de fondo .. Pero puedes usar una sóla función de conexión donde le pases los parámetros de conexión y todo esto tenerlo en un script aparte para llamarlo por un "include()" donde lo necesietes.

Código PHP:
<?
function conectarse($host,$usuario,$password,$BBDD){
   
$link=mysql_connect($host,$usuario,$password) or die (mysql_error());
   
mysql_select_db($BBDD,$link) or die (mysql_error());
   return 
$link;
}

$link1=conectarse("db.mysql1.com","usuario","pass","BBD2");
//ó
$link2=conectarse("db.mysql1.com","usuario","pass","BBDD2");
Esto ya está llegando a lo que denominan "Capas de abastracción de BBDD" como por ejemplo:

ezSQL
http://www.jvmultimedia.com/portal/node/6

ADOdb
http://adodb.sourceforge.net/

Un saludo,

Última edición por Cluster; 22/02/2006 a las 10:07
  #13 (permalink)  
Antiguo 22/02/2006, 10:02
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 5 meses
Puntos: 11
En realidad me refiero, a que con una conexion al servidor, puedes consultar 2 tablas, cada cual en bds distintas, incluso en una misma consulta.
Supongamos el caso de que tienes 2 bd en el servidor, 1 bd tiene datos generales de la empresa y la otra tiene datos de un sistema en particular, puedes hacer esto:

$link=mysql_connect("server","user","pass");
$sql="select campos from base_general.tabla_sucursales inner join base_sistemaX.tabla_clientes on ...";
mysql_query($sql);
  #14 (permalink)  
Antiguo 22/02/2006, 10:23
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por claudiovega
En realidad me refiero, a que con una conexion al servidor, puedes consultar 2 tablas, cada cual en bds distintas, incluso en una misma consulta.
Supongamos el caso de que tienes 2 bd en el servidor, 1 bd tiene datos generales de la empresa y la otra tiene datos de un sistema en particular, puedes hacer esto:

$link=mysql_connect("server","user","pass");
$sql="select campos from base_general.tabla_sucursales inner join base_sistemaX.tabla_clientes on ...";
mysql_query($sql);
Ok, claudiovega

Lo probé y funciona correctamente dicha notación. Realmente la documentación no deja claro (ni con un simple ejemplo) que se pueda usar así .. sumado a la función de PHP "_select_db()" me confundió. Gracias por el dato.

Los comentarios sobre el "link" de conexión sirven perfectamente cuando hablamos de dos o más servidores Mysql diferentes.

Un saludo,

PD: Edito mi mensaje para anterior para no confundir.
  #15 (permalink)  
Antiguo 22/02/2006, 10:29
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 5 meses
Puntos: 11
De hecho, como ves en el codigo ni siquiera es necesario elegir una bd con mysql_select_db().
En la documentación de PHP no sale, quizá por que es propio de mysql y a php le interesa documentar sus funciones, no la posibilidades de mysql u otro SGBD.

Saludos.
  #16 (permalink)  
Antiguo 22/02/2006, 10:47
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por claudiovega
De hecho, como ves en el codigo ni siquiera es necesario elegir una bd con mysql_select_db().
En la documentación de PHP no sale, quizá por que es propio de mysql y a php le interesa documentar sus funciones, no la posibilidades de mysql u otro SGBD.

Saludos.
mm Tal vez .. pero la documentación de Mysql por más que le doy vueltas no ecuentro referencia a la notación:

base_de_datos.tabla.campo
(aunque ya he comprobado que funciona correctamente y no sólo desde PHP sino con algún que otro GUI para Mysql: Navicat por ejemplo ...)

Sin embargo todos los ejemplos están repletos de referencias a sólo:

tabla.campo

Un saludo,
  #17 (permalink)  
Antiguo 22/02/2006, 11:53
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 5 meses
Puntos: 11
En realidad tampoco he visto la sintaxis en la documentación de mysql (no digo que no exista), usando sql server vi que era posible hacer aquello (viendo el código de un generador de consultas); supuse que era algo intrínseco del lenguaje sql y que cada dialecto haría una implementación de dicha característica y voila, resultó.
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 12:21.