Foros del Web » Programando para Internet » PHP »

Dudas con resultados MYSQLi

Estas en el tema de Dudas con resultados MYSQLi en el foro de PHP en Foros del Web. Hola, estoy traduciendo una web ASP y me estoy encontrando con un montón de dudas/problemas al manejar los datos extraídos de la DB con mysqli ...
  #1 (permalink)  
Antiguo 09/12/2015, 07:13
 
Fecha de Ingreso: diciembre-2010
Mensajes: 236
Antigüedad: 13 años, 4 meses
Puntos: 6
Dudas con resultados MYSQLi

Hola, estoy traduciendo una web ASP y me estoy encontrando con un montón de dudas/problemas al manejar los datos extraídos de la DB con mysqli

Tengo estas dos funciones. La primera crea un array a través de una consulta:
Código PHP:
Ver original
  1. //Procedimiento que crea un Recordset estándar.
  2. //Se le pasa una cadena que es una instrucción SQL
  3.  
  4. Function CrearRS($sql)
  5. {
  6.     Global $conn;
  7.  
  8. //Rw($sql);
  9.  
  10.     $tabla = $conn->query($sql);
  11.     If ($tabla !== False)
  12.     {
  13.         $num_registros = $tabla->num_rows;
  14.    
  15.         //Si hay resultado.
  16.         If ($num_registros > 0)
  17.         {
  18.             $GLOBALS["tabla"] = $tabla->fetch_all(MYSQLI_ASSOC);
  19.            
  20.         }
  21.        
  22.         $GLOBALS["num_registros"] = $num_registros;
  23.     }
  24.     Else
  25.     {
  26.         $GLOBALS["num_registros"] = 0;
  27.     }
  28.    
  29.     UnSet($tabla);
  30.     UnSet($num_registros);
  31. }

La segunda lo cierra:
Código PHP:
Ver original
  1. //Procedimiento que crea un Recordset estándar.
  2. //Se le pasa una cadena que es una instrucción SQL
  3. Function CerrarRS()
  4. {
  5.     Global $tabla;
  6.     Global $num_registros;
  7.    
  8.     UnSet($tabla);
  9.     UnSet($num_registros);
  10. }

No consigo que funciona bien:

Problema 1:
Resulta que tengo que nombrar los campos tal como los tengo en la DB, es decir:
Esto:
$estraduccion = $tabla["0"]["Estraduccion"];
NO es lo mismo que esto:
$estraduccion = $tabla["0"]["EsTraduccion"];

En el segundo caso me devuelve NULL por la T mayúscula
¿Esto no se puede solucionar?

Problema 2:
Todos los campos devueltos son tipo String
Por lo tanto "0" no es lo mismo que 0, esta condición no me funciona:
Código PHP:
Ver original
  1. //Si estamos editando una traducción.
  2.         If ($estraduccion !== 0)
  3.         {          
  4.             //Los campos siguientes no serán editables en las traducciones.
  5.             $readonly = " readonly ";
  6.  
  7.             $infotxt = "Traducción de : " . ComprobarLogico($tabla_modulo, "NOTitulo", "Id=" . $estraduccion) .
  8.                       LinkBlank(1, "/blog/" . $estraduccion . "/" . ComprobarLogico($tabla_modulo, "Title", "Id=" . $estraduccion)) . "</br>" .
  9.                       "Haga clic para ver otros idiomas: <i class='fa fa-flag fa-lg cms_mostrar_traducciones' data-id='" . $estraduccion . "' data-mod='" . $tabla_modulo . "'></i>";
  10.         }
Ya que "0" es distinto de 0 y tendría que revisar miles de sentencias IF
¿hay manera que mysqli devuelva el campo con su tipo?

problema 3:
Después de ejecutar una consulta y extraer sus datos, siempre la cierro.
Pues bien ¿por qué después de ejecutar CerrarRs() sigo teniendo acceso a las variables?
  #2 (permalink)  
Antiguo 09/12/2015, 08:35
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Dudas con resultados MYSQLi

1. Obtendrás los nombres de columnas tal cual vienen en la base de datos, si no sabes qué datos vienen y en qué formato puedes revisar tu base de datos, o bien, usar var_dump() para inspeccionar el resultado.

2. Así es, los valores vienen como strings a menos que hagas lo que dicen por acá: http://stackoverflow.com/questions/2...mber-as-string o bien, aplicar type-casting si sabes de qué tipo es lo que obtienes:

Código PHP:
Ver original
  1. $x = "1";
  2. $x = (int) $x;
  3.  
  4. var_dump($x === 1);

3. Pues porque la técnica que usas simplemente contamina el espacio global de variables, y una cosa es limpiar las referencias dentro de tus funciones pero siguen presentes en el contexto global; toda variable que uses mediante $GLOBALS o "global" te darán problemas, es una técnica desaconsejada además de pésima práctica.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Etiquetas: dudas, mysql, mysqli, registro, resultados, sql, tabla, variable
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 04:07.