Foros del Web » Programando para Internet » PHP »

Ámbito de variables

Estas en el tema de Ámbito de variables en el foro de PHP en Foros del Web. Hola, bueno pues verán, en un mismo archivo tengo dos funciones: conectarBD() y devuelveSQL() Fuera de las funciones tengo una variable declarada como $cn=''; En ...
  #1 (permalink)  
Antiguo 30/11/2005, 04:57
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 10 meses
Puntos: 7
Ámbito de variables

Hola, bueno pues verán, en un mismo archivo tengo dos funciones:

conectarBD() y devuelveSQL()

Fuera de las funciones tengo una variable declarada como $cn='';

En conectarBD() uso la variable $cn para crear la conexión a la Base de Datos.
$cn = mysql_connect....;
mysql_select_db.....;

Pero despues al intentar usar la variable $cn desde devuelveSQL es como si no existiera, tengo que volver a poner las líneas de $cn=mysql_connect.. dentro de la funcion para que me funcione.

¿Alguien sabe que estoy haciendo mal?
__________________
Charlie.
  #2 (permalink)  
Antiguo 30/11/2005, 05:33
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 9 meses
Puntos: 102
... declara a las variables como globales. Reviza las FAQ, hay una que dice: ¿por qué mis variables pierden su valor? --ó algo por el estilo--, ve que es tu problema.

__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #3 (permalink)  
Antiguo 30/11/2005, 05:38
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 9 meses
Puntos: 102
Ambito de las variables
¿Por qué pierde el valor mi variable dentro de mi función?

__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #4 (permalink)  
Antiguo 30/11/2005, 05:44
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Deberías indicar el código que usas en ambas funciones y como las llamas (usas).

De todas formas . .en principio si tu expresamente no declaras como global en la función una variable que definas y/o uses fuera de la función .. o bien la pases como parámetro a dicha función no podrás acceder a su valor.

Ejemplo
Código PHP:
function conectarDB(){
global 
$cn;
// etc código actual que usas ..

Si la defines como global ($cn) .. podras acceder a su valor desde fuera de la función .. pero si ese valor necesitas usarlo en otra función tendrás que pasarsela como parámetro a la misma .. o declararlo nuevamente como global

ejemplo:
Código PHP:
function devuelveSQL($cn){
// usas $cn ...

ó

Código PHP:
function devuelveSQL(){
global 
$cn;
// usas $cn ...


Pero .. tal cual lo usas .. lo lógico es que conectarDB() devuelva ese $cn al llamarlo:
Código PHP:
function conectarDB(){
// etc código actual que usas ..
return $cn;

$cn=conectarDB();

Y .. luego el resto de funciones que usen la conexión hagan uso de forma global de esa variable ..

Código PHP:
function devuelveSQL(){
global 
$cn;
// usas $cn ...

o bien pasarla como parámetro (sobre todo útil cuando tengas que establecer várias conexiones diferentes a una misma u otra BD en un mismo script):

Código PHP:
function devuelveSQL($cn){
// usas $cn ...


Además .. recuerda que un "link" de conexión es global para todo el script si sólo usas uno por script (no he visto tus funciones ni su uso en tu contexto .. pero parece que aunque uses funcionas así está funcionando tu código o así podría funcionar sin opción a establecer más links de conexión por script), por ende, .. no es necesario ni que uses $cn (tu link de conexión) si es que sólo usas uno .. o fijas a una determinada conexión para dicha función y luego vas declarando como global ese $cn (conexión link).

Más info y detalles:
http://www.php.net/manual/en/languag...bles.scope.php
(ambito de las variables o "scope")
www.php.net/mysql_connect
(revisa la teoría sobre como se establecen y como se usan los "links" de conexión a una BD).


Un saludo,
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 18:33.