Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PHP (https://www.clubdelphi.com/foros/forumdisplay.php?f=15)
-   -   defecto del mysql_fetch_array()??? (https://www.clubdelphi.com/foros/showthread.php?t=56612)

gabrielflowers 22-05-2008 00:31:47

defecto del mysql_fetch_array()???
 
hola nuevamente, hace poco expuse el tema "defecto en el metodo POST", ahora tengo un problema similar pero es con la funcion mysql_fetch_array();
veran al hacer una consulta a una bd mysql, donde si es que mi sql de consulta contiene campos con "." como parte de su nombre por ejm: "a.cod", entonces al obtener los datos de resultado, el nombre dichos campos son alterados, por ejm ese mismo campo quedaria con el nombre "cod" (es decir se suprimen los caracteres antes del "." y el punto incluido), vean este script e ejemplo
Código PHP:

$sql="SELECT a.cod,documento_ref_cod,fecha,moneda_cod,m.nombre,tipo_cambio,glosa,a.estado FROM asiento as a,moneda as m WHERE a.moneda_cod=m.cod";
if(
$enlace=mysql_connect('localhost''root''admin123'))
{
 if(
mysql_select_db('adm_sistema',$enlace))
 {
  if(
$rs=mysql_query($sql))
  {
   
$i=0;
   while (
$fila=mysql_fetch_arrray($rs,MYSQL_ASSOC)) 
   {
          
$mdatos[$i]=$fila;
    
$i++;
   }
  }
 }
}
mysql_free_result($rs);
mysql_close($enlace);
echo 
'<br><pre>';
print_r($mdatos[0]);
echo 
'</pre>'

claro no podran ejecutarlo en sus maquinas pues no tienen dicha bd, pero el hecho como dije es que al obtener los datos de la bd con la funcion mysql_fetch_arrray($rs,MYSQL_ASSOC)) , me suprime los caracteres antes del "." y el punto incluido, quedando como resultado falsas llaves, que en mi caso hacen que mi algoritmo no funcione correctamente, comprenden???, que solucion proponen???, y osea para mi eso es anormal por que haciendo pruebas conclui que un array puede tener llaves con "." incluido en sus nombres, ejm:

Código PHP:

$vector['a.name']="john";
 
$vector["b.surname"]="kenedy";
  echo 
'<br><pre>';
 
print_r($vector);
 echo 
'</pre>';
 echo 
'<br>'

me imprime las llaves tal como estan originalmente, cual es problema entonces del mysql_fetch_array()???, por que de su comportamiento anormal???, y mas que nada como solucionar dicha alteracion de llaves????, gracias de antemano

roman 22-05-2008 01:38:54

Cita:

Empezado por gabrielflowers
me suprime los caracteres antes del "." y el punto incluido

No entiendo porqué piensas que debería devolverte esos caracteres. No forman parte del nombre del campo. El "a" es simplemente el nombre de la tabla (o alias) que te permite indicarle al motor a qué tabla pertenece el campo, pero el campo en sí, sigue siendo sólo lo que hay después del punto.

Y, de hecho no entiendo porqué te conflictúa. ¿Cuál es el problema en usar simplemente $fila['cod'] en lugar de $fila['a.cod'] para obtener el valor del campo?

// Saludos

gabrielflowers 23-05-2008 16:39:48

roman: bueno para empezar para mi la funcion mysql_fetch_array deberia devolverme (o permitirme obtener) un array con las claves originales tal como estan el sql de consulta, bueno para mi ese seria su comportamiento normal; ahora bien tu dices que en "a.cod" cod es en realidad el nombre del campo y "a" es la tabla, claro amigo evidentemente es asi, pero imagina que tengo otro campo "b.cod", entonces la consulta sql devolveria dos campos "cod" (sin "a.") y "cod" (sin "b."), osea eso es algo confuso, creo que se puede solucionar dandole un alias a cada campo, pero a mi punto de vista la solucion mas optima seria que la funcion mysql_fetch_array() me devolviera un array con los campos originales, tal y como estan escritos en el sql para no crear confusion en ningun caso, bueno eso por un lado

por otro parte mi estimado roman, el hecho es que yo necesito casi imprescindiblemente que el sql me devuelva un array con los campos orginales con punto y todo, pues veras, yo estoy creando una libreria de componentes web, y para tal efecto cada componente deberia vivir por si solo, conociendo su propia estructura, bueno es mas que eso, pero no quiero comprometer mi proyecto, por eso solo te digo eso, gracias

pdta: entonces no se puede hacer nada al respecto???? solo me queda ajustarme a la forma de trabajo de php y su funcion mysql_fetch_array()???, sugerencias??, gracias, saludos

roman 23-05-2008 17:22:13

Insisto; este problema no es inherente a PHP o MySQL. Si tu haces una consulta SQL que involucra varias tablas, la tabla de procedencia de cada campo no es parte de los datos, sino de los metadatos -información acerca de los datos.

Distintos motores y/o medios de acceso, tendrán distintas formas de obtener esa metadata.

Cita:

Empezado por gabrielflowers
entonces no se puede hacer nada al respecto???? solo me queda ajustarme a la forma de trabajo de php y su funcion mysql_fetch_array()???, sugerencias??

Claro que se puede hacer algo al respecto, es sólo que no es tan directo. Si gustas, te invito a leer mi "artículo" Acceso a datos con clase, que trata precisamente eso: cómo lidiar con campos del mismo nombre sin recurrir a alias.

// Saludos


La franja horaria es GMT +2. Ahora son las 14:56:07.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi