Foros del Web » Programando para Internet » PHP »

Novato intentando conectar a MySQL en 1 funcion

Estas en el tema de Novato intentando conectar a MySQL en 1 funcion en el foro de PHP en Foros del Web. Wenas. Este es primer tema en este foro, aunque sigo la web desde hace años. Lo mio es el C++ y los objetos, por eso ...
  #1 (permalink)  
Antiguo 02/08/2006, 04:30
 
Fecha de Ingreso: agosto-2006
Mensajes: 4
Antigüedad: 17 años, 7 meses
Puntos: 0
Novato intentando conectar a MySQL en 1 funcion

Wenas. Este es primer tema en este foro, aunque sigo la web desde hace años.
Lo mio es el C++ y los objetos, por eso le doy al PHP, aunque llevo poco tiempo y aun no me hago a el.

Tengo q hacer una aplicacion de gestion de una biblioteca, y como de momento no me quiero meter a objetos en PHP (no he leido nada de referencia), quiero hacer la conexion a MySQL desde una funcion.
Pero no me funciona, y con razon, ya q por lo visto mysql_connect() se desconecta en cuanto se sale del ambito en q ha sido llamada.

Alguna solucion pa poder llamar a mi funcion de conexion desde donde quiera???

Gasias.
  #2 (permalink)  
Antiguo 02/08/2006, 07:28
Avatar de Jorgemen  
Fecha de Ingreso: mayo-2005
Ubicación: Perú
Mensajes: 322
Antigüedad: 18 años, 10 meses
Puntos: 1
conectar.php

<?php
function conectarse()
{
if (!($link=mysql_connect("localhost", "usuario","password")))
{
exit();
}
if (!mysql_select_db("BaseDatos",$link))
{
exit();
}
return $link;
}
?>

lo icluyes desde donde sea y llamas al método para conectarse
__________________
Hosting:www.codeperu.com, Trabajo en Perú: www.trabajoperuano.com
  #3 (permalink)  
Antiguo 02/08/2006, 07:32
Avatar de Azrael666  
Fecha de Ingreso: noviembre-2004
Mensajes: 652
Antigüedad: 19 años, 4 meses
Puntos: 1
o prueba con esto:

fichero conex.php:

Código PHP:
$server="elquesea";
  
$usuario="elusuario";
  
$pass="elpass";
  
$base="labase";
  
$link=@mysql_connect($server,$usuario,$pass)or die (exit(mysql_error()));
  
mysql_select_db($base); 
y en los archivos en los que quieras usarlo pones

Código PHP:
include ("conex.php"); 
y ya haces la consulta.

bueno.. hay varias opciones.. elige la que mas te guste o convenga en cada caso jeje
__________________
ALOZORRO v5.0 (ahora en .es)
  #4 (permalink)  
Antiguo 02/08/2006, 07:42
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Cita:
Tengo q hacer una aplicacion de gestion de una biblioteca, y como de momento no me quiero meter a objetos en PHP (no he leido nada de referencia), quiero hacer la conexion a MySQL desde una funcion.
Pero no me funciona, y con razon, ya q por lo visto mysql_connect() se desconecta en cuanto se sale del ambito en q ha sido llamada.

Alguna solucion pa poder llamar a mi funcion de conexion desde donde quiera???
No sé si cuando hablas de "ambito" te refieres en la ejecución de un mismo script o que pretendes usar esa conexión en diferentes scripts.

Por la naturaleza de PHP .. al ejecutar un script y terminar su ejecución (final) se cierra toda conexión (no persistente) a tus BBDD, se deshace de toda memoria usada por variables y demás entre otras cosas. En definitiva .. todo proceso muere ahí mismo.

Si hablamos de un mismo script .. un "link" de conexión establecido tiene ambito para todo el scritp en curso . .incluido en llamadas bajo funciones

Así que puedes hacer tu función de conexión:
Código PHP:
function conexion(){
  
mysql_connect(...);
  
mysql_select_db(.....);

Y usar tus mysql_query() y demás donde quieras ..

Si usas un link de conexión exclusivo .. tendras que devolverlo en tu función y pasarlo como referencia o gloabal a otras funciones que lo usen.

Código PHP:
function conexion(){
  
$link=mysql_connect(...);
  
mysql_select_db(.....,$link);
  return 
$link;
}

$link=conexion(...);
mysql_query($sql,$link); 


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 03/08/2006, 00:34
 
Fecha de Ingreso: agosto-2006
Mensajes: 4
Antigüedad: 17 años, 7 meses
Puntos: 0
Mi codigo es el siguiente:

conexion.php
Código PHP:
$host "localhost";
$user "root";
$pass "";
$DB "biblio_adam_madrid";

global 
$enlace;

function 
AbrirBD()
{
    
$enlace mysql_connect($host,$user,$pass);
    
mysql_select_db($DB);
    return 
$enlace;

catalogo.php
Código PHP:
$enlace AbrirBD();
    
//$enlace = mysql_connect($host,$user,$pass);
    //mysql_select_db($DB);
$resulConsulta mysql_query("SELECT * FROM socios",$enlace);
$registro mysql_fetch_array($resulConsulta);
mysql_free_result($resulConsulta); 
Si hago la conexion con las dos lineas comentadas, perfecto.
Pero si la hago con la funcion de mas arriba, obtengo esto:

Código:
Warning: mysql_connect(): Access denied for user 'ODBC'@'localhost' (using password: NO) in c:\appserv\www\biblio\conexion.php on line 11

Warning: mysql_select_db(): Access denied for user 'ODBC'@'localhost' (using password: NO) in c:\appserv\www\biblio\conexion.php on line 12

Warning: mysql_select_db(): A link to the server could not be established in c:\appserv\www\biblio\conexion.php on line 12

Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in c:\appserv\www\biblio\catalogo.php on line 12

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\appserv\www\biblio\catalogo.php on line 13

Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in c:\appserv\www\biblio\catalogo.php on line 14
Ambos metodos de conexion son identicos, como podeis ver.

Al ppio lo q hacia es tener $enlace global, pero sin devolverlo en AbrirBD(); ahora lo devuelvo ahi y consigo lo mismo.

Me q la unica solucion para remediar el alcance de los scripts sera usar sesiones...
Alguna wena referencia?
  #6 (permalink)  
Antiguo 03/08/2006, 07:03
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
El global $enlace; debería estar en tu Función AbrirDB .. pero en ese caso no tiene sentido que devuelvas $enlace bajo el "return" de la misma ..

Pero el problema no es ese .. el problema es que a tu función AbrirBD no le pasas las variables que defines fuera de esa función y que pretendes usar -dentro- de la misma: $host,$user,$pass,$DB ..

Más de lo mismo en este caso .. o las declaras como "global" EN la función (dentro) .. o se las pasas como parámetro a la misma. A esto se le llama "ambito de las variables" (o en ingles: scope).


Cita:
Alguna wena referencia?
Repasa el uso de funciones en PHP:
http://www.php.net/manual/en/language.functions.php

Cita:
Me q la unica solucion para remediar el alcance de los scripts sera usar sesiones...
No .. esa no es la solución .. Creo que estás confundiendo términos como "sesión" y el "ambito de las variables". De hecho en una variable de sesión no se puede propagar un "link" de conexión ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 03/08/2006, 15:29
 
Fecha de Ingreso: agosto-2006
Mensajes: 4
Antigüedad: 17 años, 7 meses
Puntos: 0
Vale, ya me fona. Usease, q en PHP las variables no se declaran como globales desde un primer momento, y global vendria a ser como el :: de C++, no?

Pero a pesar de eso, no entiendo porq esas variables definidas a nivel de archivo, no son visibles en una de sus funciones...
  #8 (permalink)  
Antiguo 03/08/2006, 15:58
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Lee la documentacion de PHP, en particular el apartado que dice Varaibles Scope para que entiendas donde si y donde no se ven las variables
  #9 (permalink)  
Antiguo 03/08/2006, 15:58
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Cita:
Iniciado por Aruku K. Fuosu
Vale, ya me fona. Usease, q en PHP las variables no se declaran como globales desde un primer momento, y global vendria a ser como el :: de C++, no?

Pero a pesar de eso, no entiendo porq esas variables definidas a nivel de archivo, no son visibles en una de sus funciones...
Yo no sé C .. pero lo que si que sé es que en el lenguaje de turno que use lo primero que debo hacer es ir a mirar los manuales de estos y esos capítulos concretos para ver si trabjan "igual" a algo que conozca o he usado o tiene alguna diferencia.

Te hago esa recomendación para que no te guíes tanto de lo que sabes como funciona en "C" y te remitas más al manual oficial de PHP .. veras que te irá mejor.

Cita:
Pero a pesar de eso, no entiendo porq esas variables definidas a nivel de archivo, no son visibles en una de sus funciones
Bueno . .así es en PHP que le vamos hacer?: conocer que funciona así y atacarlo .. puedes recurrir a las "listas de correo" donde está la gente que desarrolla PHP y discutir el tema con ellos si te parece (yo no me hago más problema en eso .. insisto: aprende como funcionan las cosas en el ambiente que estás y luego decide si te agrandan o no tal vez para elegir otro lenguaje que te agrade más?)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #10 (permalink)  
Antiguo 03/08/2006, 16:02
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Pensandolo bien .. no me imagino una función que no puedas tener "variables própias" de la misma para no confundirlas con otras que declaras o usas "por fuera" de la función ..

Queda más ordenado pasar por parámetro (o referencia) a una función sus datos y no "abusar" de declaraciones "globales" de varibles (píenso yo) ... Pero bueno .. esto ya va a gustos ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #11 (permalink)  
Antiguo 04/08/2006, 16:15
 
Fecha de Ingreso: agosto-2006
Mensajes: 4
Antigüedad: 17 años, 7 meses
Puntos: 0
Cita:
Iniciado por Cluster Ver Mensaje
Pensandolo bien .. no me imagino una función que no puedas tener "variables própias" de la misma para no confundirlas con otras que declaras o usas "por fuera" de la función ..
Tmp es pa criticar asi... Vamos, toda la vida de diox se han definido variables a nivel x, y estas son visibles en todos los ambitos contenidos en ese nivel; teniendo en cuenta q siempre se define PHP como el C script, pos creo q lo normal es el error q me ha ocurrido...

Tmp he cogido un manual de PHP de P a PA, solo he ido viendo documentacion de las funciones q usaba.
Pero weno, mejor leerte 1200 paginas de referencia, q molestar a nadie con un pregunta tan tonta.
  #12 (permalink)  
Antiguo 04/08/2006, 17:04
Avatar de Nefertiter  
Fecha de Ingreso: enero-2003
Ubicación: Rosario
Mensajes: 1.316
Antigüedad: 21 años, 2 meses
Puntos: 9
Cita:
Tmp es pa criticar asi.
creo fue una critica contrucctiva, tu programaste mal, y te dijeron como solucionar el error, y como tenerlo en cuanta para la proxima.
Yo cuando empeza a aprender php, me lei el manual y no entendi un choto, pero con ejemplos fui aprendiendo, y casi sin joder a nadie :P,
la documentacion es vital ;)
  #13 (permalink)  
Antiguo 04/08/2006, 18:01
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Cita:
Iniciado por Aruku K. Fuosu Ver Mensaje
Tmp es pa criticar asi... Vamos, toda la vida de diox se han definido variables a nivel x, y estas son visibles en todos los ambitos contenidos en ese nivel; teniendo en cuenta q siempre se define PHP como el C script, pos creo q lo normal es el error q me ha ocurrido...

Tmp he cogido un manual de PHP de P a PA, solo he ido viendo documentacion de las funciones q usaba.
Pero weno, mejor leerte 1200 paginas de referencia, q molestar a nadie con un pregunta tan tonta.
No se trata de leer las 1200 pàginas del manual en forma secuencial. Eso no sirve de nada.

Tu sabes que en programaciòn hay vàrios grupos de cosas que ver:
Tratamiento de variables, funciones y cosas asì. Esos son los capítulos que tienes que ir leyendo .. ahì le quitarás 1100 páginas que son descripciones de "funciones" y demás .. También ten presente que el manual oficial de PHP es de "referencia" .. pero puedes ver "tutoriales", como los que se recomiendan en las FAQ's de este foro.

Eso de que PHP es un "C script" es un mito .. el hecho de que su sintax se parezca o esté màs cercana a "C" no implica nada ...

No he hecho una critica ..sòlo una opiniòn al respecto, tomala como gustes.

Lo que hago una vez màs incapié es en el hecho de no "acostumbrase" de por què en tal lenguaje se hace "asá" .. en PHP se debe hacer "igual". Eso es todo .. tampoco hay que tomarse las cosas tan a-pecho.


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 08:58.