Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/12/2015, 07:13
PabloManuel
 
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?