Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problemas en PHP con consultas a Mysql

Estas en el tema de Problemas en PHP con consultas a Mysql en el foro de PHP en Foros del Web. en mi pagina hago estas dos consultas $empresas = consultarEmpresas($mysqli); Carga un select $consultaUsuarios = consultaUsers($mysqli); Carga una tabla por medio de in SP es ...
  #1 (permalink)  
Antiguo 08/01/2015, 18:44
 
Fecha de Ingreso: enero-2015
Ubicación: Buenos Aires
Mensajes: 6
Antigüedad: 9 años, 3 meses
Puntos: 0
Pregunta Problemas en PHP con consultas a Mysql

en mi pagina hago estas dos consultas

$empresas = consultarEmpresas($mysqli); Carga un select
$consultaUsuarios = consultaUsers($mysqli); Carga una tabla por medio de in SP

es muy raro raro lo que pasa cuando las dos consultas eran select que hacia directo desde la pagina PHP funcionaba bien, pero ahora que hice un SP no.

si las dos lineas de arriba invierto el orden o sea corro primero el select y despues el SP funciona.
mirando el log de sql cuando corro primero el SP ni siquera ejecuta el select pero por el mensaje de error que tengo el campo select de la paqina llega hasta el if que valida que tenga registros y sale por el else.

les paso el codigo de las dos funciones.

<?php

// Constantes conexión con la base de datos
define("server", 'localhost');
define("user", 'root');
define("pass", 'root');
define("mainDataBase", 'ui');

// Variable que indica el status de la conexión a la base de datos
$errorDbConexion = false;


// Función para extraer el listado de usurios
function consultaUsers($linkDB){
$statusTipoOK = array("Masculino" => "btn-success",
"Femenino" => "btn-warning");


$salida = '';

//$consulta = $linkDB -> query("SELECT a.afi_Id,a.afi_Nombre,a.afi_Apellido,e.emp_Nombre, a.afi_Sexo FROM tafiliados a, tempresas e where a.emp_Id = e.emp_Id ORDER BY afi_Nombre ASC");
$consulta = $linkDB -> query("CALL sp_afiliados");

if($consulta -> num_rows != 0){

// convertimos el objeto
while($listadoOK = $consulta -> fetch_assoc())
{
$salida .= '
<tr>
<td>'.$listadoOK['afi_Nombre'].'</td>
<td>'.$listadoOK['afi_Apellido'].'</td>
<td>'.$listadoOK['emp_Nombre'].'</td>
<td class="centerTXT"><a data-accion="editar" class="btn btn-mini" href="'.$listadoOK['afi_Id'].'">Editar</a> <a data-accion="eliminar" class="btn btn-mini" href="'.$listadoOK['afi_Id'].'">Eliminar</a></td>
<tr>
';
// <td class="centerTXT"><span class="btn btn-mini '.$statusTipoOK[$listadoOK['afi_Sexo']].'">'.$listadoOK['afi_Sexo'].'</span></td>

// <td class="centerTXT"><span class="btn btn-mini '.$statusTipo[$listadoOK['afi_Sexo']].'">'.$listadoOK['afi_Sexo'].'</span></td>

}
}
else{
$salida = '
<tr id="sinDatos">
<td colspan="5" class="centerTXT">NO HAY REGISTROS EN LA BASE DE DATOS</td>
</tr>
';
}

return $salida;
}

//Función para extrer las empresas para llenar el select
function consultarEmpresas($linkDB){
$salida = '';
$consultaEmpresas = $linkDB -> query("SELECT emp_Id,emp_Nombre FROM tempresas ORDER BY emp_Nombre ASC");

if($consultaEmpresas -> num_rows != 0){

// convertimos el objeto
while($listadoOK = $consultaEmpresas -> fetch_assoc())
{
$salida .= '<option value="'.$listadoOK['emp_Id'].'">'.$listadoOK['emp_Nombre'].'</option>';
}

}
else{
$salida = '
<tr id="sinDatos">
<td colspan="5" class="centerTXT">PILU NO HAY REGISTROS EN LA BASE DE DATOS</td>
</tr>
';
}

return $salida;
}

// Verificar constantes para conexión al servidor
if(defined('server') && defined('user') && defined('pass') && defined('mainDataBase'))
{
// Conexión con la base de datos
$mysqli = new mysqli(server, user, pass, mainDataBase);

// Verificamos si hay error al conectar
if (mysqli_connect_error()) {
$errorDbConexion = true;
}
// Evitando problemas con acentos
$mysqli -> query('SET NAMES "utf8"');
}
?>
  #2 (permalink)  
Antiguo 08/01/2015, 19:08
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problemas en PHP con consultas a Mysql

Ok...
¿Y cuál es el código del SP? ¿Al llamarlo devuelve algún error?
Esto último lo pregunto porque en realidad no estás verificando si hay o no errores. Solo miras si devolvió registros, lo que no es lo mismo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 08/01/2015, 21:03
 
Fecha de Ingreso: enero-2015
Ubicación: Buenos Aires
Mensajes: 6
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: Problemas en PHP con consultas a Mysql

codigo de sp_afiliados

BEGIN
SELECT a.afi_Id,a.afi_Nombre,a.afi_Apellido,e.emp_Nombre, a.afi_Sexo
FROM tafiliados a, tempresas e
where a.emp_Id = e.emp_Id;
END


igual tene en cuenta que si en la pagina php invierto el orden en que hago las consultas
primero el select que esta en el código y después el llamado al sp funciona ok

así funciona
$empresas = consultarEmpresas($mysqli); Carga un select que esta en el PHP
$consultaUsuarios = consultaUsers($mysqli); Carga una tabla por medio de in SP
  #4 (permalink)  
Antiguo 09/01/2015, 05:10
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: Problemas en PHP con consultas a Mysql

Qué intentas hacer? Porqué necesitas mezclar las maneras de obtener datos? cómo llamas al SP de Afiliados, en qué momento del código?...

"Tengo un problema" y luego tiras un codigo sin resaltar para que los Teemos de aca lo craneen me parece una falta de consideración.. al menos comenta tus lineas de código y resaltalos con highlight...
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #5 (permalink)  
Antiguo 09/01/2015, 15:16
 
Fecha de Ingreso: enero-2015
Ubicación: Buenos Aires
Mensajes: 6
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: Problemas en PHP con consultas a Mysql

en la pagina index.php lo prinero que hago son estas dos lineas para recuperar los datos.
tanto de la tabla como del Select.

$consultaUsuarios = consultaUsers($mysqli); Carga una tabla por medio de in SP
$empresas = consultarEmpresas($mysqli); Carga un select que esta en el PHP


no es que mezclo la forma de obtener los datos, la idea es hacer todos SP pero cuando arranque hice los select directo en el código de las funciones, ahora que cambie el primer select a un SP me paso esto.

el tema es que no me da error por eso no marco nada, muestro las dos funciones donde recupero los datos.
si corro primero la función que usa un SP y después la que hace el select no funciona, pero si corro primero la del select y despues la del SP si funciona, y lo otro que vi es que en el log de mysql cuando no funciona, no corre el select y si el SP.


<?php

// Constantes conexión con la base de datos
define("server", 'localhost');
define("user", 'root');
define("pass", 'root');
define("mainDataBase", 'ui');

// Variable que indica el status de la conexión a la base de datos
$errorDbConexion = false;


// Función para extraer el listado de usurios
function consultaUsers($linkDB){
$statusTipoOK = array("Masculino" => "btn-success",
"Femenino" => "btn-warning");


$salida = '';

//$consulta = $linkDB -> query("SELECT a.afi_Id,a.afi_Nombre,a.afi_Apellido,e.emp_Nombre, a.afi_Sexo FROM tafiliados a, tempresas e where a.emp_Id = e.emp_Id ORDER BY afi_Nombre ASC");
$consulta = $linkDB -> query("CALL sp_afiliados");

if($consulta -> num_rows != 0){

// convertimos el objeto
while($listadoOK = $consulta -> fetch_assoc())
{
$salida .= '
<tr>
<td>'.$listadoOK['afi_Nombre'].'</td>
<td>'.$listadoOK['afi_Apellido'].'</td>
<td>'.$listadoOK['emp_Nombre'].'</td>
<td class="centerTXT"><a data-accion="editar" class="btn btn-mini" href="'.$listadoOK['afi_Id'].'">Editar</a> <a data-accion="eliminar" class="btn btn-mini" href="'.$listadoOK['afi_Id'].'">Eliminar</a></td>
<tr>
';
// <td class="centerTXT"><span class="btn btn-mini '.$statusTipoOK[$listadoOK['afi_Sexo']].'">'.$listadoOK['afi_Sexo'].'</span></td>

// <td class="centerTXT"><span class="btn btn-mini '.$statusTipo[$listadoOK['afi_Sexo']].'">'.$listadoOK['afi_Sexo'].'</span></td>

}
}
else{
$salida = '
<tr id="sinDatos">
<td colspan="5" class="centerTXT">NO HAY REGISTROS EN LA BASE DE DATOS</td>
</tr>
';
}

return $salida;
}

//Función para extrer las empresas para llenar el select
function consultarEmpresas($linkDB){
$salida = '';
$consultaEmpresas = $linkDB -> query("SELECT emp_Id,emp_Nombre FROM tempresas ORDER BY emp_Nombre ASC");

if($consultaEmpresas -> num_rows != 0){

// convertimos el objeto
while($listadoOK = $consultaEmpresas -> fetch_assoc())
{
$salida .= '<option value="'.$listadoOK['emp_Id'].'">'.$listadoOK['emp_Nombre'].'</option>';
}

}
else{
$salida = '
<tr id="sinDatos">
<td colspan="5" class="centerTXT">PILU NO HAY REGISTROS EN LA BASE DE DATOS</td>
</tr>
';
}

return $salida;
}

// Verificar constantes para conexión al servidor
if(defined('server') && defined('user') && defined('pass') && defined('mainDataBase'))
{
// Conexión con la base de datos
$mysqli = new mysqli(server, user, pass, mainDataBase);

// Verificamos si hay error al conectar
if (mysqli_connect_error()) {
$errorDbConexion = true;
}
// Evitando problemas con acentos
$mysqli -> query('SET NAMES "utf8"');
}
?>

Última edición por cabrejae; 09/01/2015 a las 15:25 Razón: repetí el comentario por eso edito
  #6 (permalink)  
Antiguo 10/01/2015, 10:32
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: Problemas en PHP con consultas a Mysql

La verdad que sin resaltar el codigo no lo pienso ni mirar, te soy sincero... no cuesta nada poner un Highlight.. pero mi pregunta es... ES NECESARIO HACER ESE SP solo para un select de usuario? No se, pregunto... Lo entendería si fuera una aplicación de escritorio muy grande, pero no se.. desconozco su fin... o será que no está pudiendo llamar al procedimiento?
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #7 (permalink)  
Antiguo 10/01/2015, 10:44
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problemas en PHP con consultas a Mysql

No es obligatorio usar SP para eso, pero es una política de segurzacion de bases de datos habitual. En algunas empresas es obligatorio hacer todo acceso a la base así.
De todos modos, ese código sin usar highlights realmente es ilegible.
Edita los post y ponle el highlight para que al menos podamos analizarlo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 11/01/2015, 16:47
 
Fecha de Ingreso: enero-2015
Ubicación: Buenos Aires
Mensajes: 6
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: Problemas en PHP con consultas a Mysql

aca lo mando con el Highlight, perdon no entendia a que se referian por eso no lo hice antes.

para acotar el problema les comento esto por si no quedo claro.

las dos consultas solas desde el codigo o sea comentando una funcionan.
y si el orden en el que llamo a las funciones es primero el que hace el select directo y despues el del llamdo al SP tambien funciona ok.
por el log de mysql cuando hago primero el llamado al SP y despues al Select, en el log esta el llamado al SP y no Select, o no veo en el log que haga esto
$consultaEmpresas = $linkDB -> query("SELECT emp_Id,emp_Nombre FROM tempresas ORDER BY emp_Nombre ASC");
si estoy seguro que llama a la funcion pero la consulta no la veo en el log.

Saludos.-




Código PHP:
Ver original
  1. <?php
  2.  
  3. // Constantes conexión con la base de datos
  4. define("server", 'localhost');
  5. define("user", 'root');
  6. define("pass", 'root');
  7. define("mainDataBase", 'ui');
  8.  
  9. // Variable que indica el status de la conexión a la base de datos
  10. $errorDbConexion = false;
  11.  
  12.  
  13. // Función para extraer el listado de usurios
  14. function consultaUsers($linkDB){
  15. $statusTipoOK = array("Masculino" => "btn-success",
  16. "Femenino" => "btn-warning");
  17.  
  18.  
  19. $salida = '';
  20.  
  21. //$consulta = $linkDB -> query("SELECT a.afi_Id,a.afi_Nombre,a.afi_Apellido,e.emp_Nombre, a.afi_Sexo FROM tafiliados a, tempresas e where a.emp_Id = e.emp_Id ORDER BY afi_Nombre ASC");
  22. $consulta = $linkDB -> query("CALL sp_afiliados");
  23.  
  24. if($consulta -> num_rows != 0){
  25.  
  26. // convertimos el objeto
  27. while($listadoOK = $consulta -> fetch_assoc())
  28. {
  29. $salida .= '
  30. <tr>
  31. <td>'.$listadoOK['afi_Nombre'].'</td>
  32. <td>'.$listadoOK['afi_Apellido'].'</td>
  33. <td>'.$listadoOK['emp_Nombre'].'</td>
  34. <td class="centerTXT"><a data-accion="editar" class="btn btn-mini" href="'.$listadoOK['afi_Id'].'">Editar</a> <a data-accion="eliminar" class="btn btn-mini" href="'.$listadoOK['afi_Id'].'">Eliminar</a></td>
  35. <tr>
  36. ';
  37. // <td class="centerTXT"><span class="btn btn-mini '.$statusTipoOK[$listadoOK['afi_Sexo']].'">'.$listadoOK['afi_Sexo'].'</span></td>
  38.  
  39. // <td class="centerTXT"><span class="btn btn-mini '.$statusTipo[$listadoOK['afi_Sexo']].'">'.$listadoOK['afi_Sexo'].'</span></td>
  40.  
  41. }
  42. }
  43. else{
  44. $salida = '
  45. <tr id="sinDatos">
  46. <td colspan="5" class="centerTXT">NO HAY REGISTROS EN LA BASE DE DATOS</td>
  47. </tr>
  48. ';
  49. }
  50.  
  51. return $salida;
  52. }
  53.  
  54. //Función para extrer las empresas para llenar el select
  55. function consultarEmpresas($linkDB){
  56. $salida = '';
  57. $consultaEmpresas = $linkDB -> query("SELECT emp_Id,emp_Nombre FROM tempresas ORDER BY emp_Nombre ASC");
  58.  
  59. if($consultaEmpresas -> num_rows != 0){
  60.  
  61. // convertimos el objeto
  62. while($listadoOK = $consultaEmpresas -> fetch_assoc())
  63. {
  64. $salida .= '<option value="'.$listadoOK['emp_Id'].'">'.$listadoOK['emp_Nombre'].'</option>';
  65. }
  66.  
  67. }
  68. else{
  69. $salida = '
  70. <tr id="sinDatos">
  71. <td colspan="5" class="centerTXT">PILU NO HAY REGISTROS EN LA BASE DE DATOS</td>
  72. </tr>
  73. ';
  74. }
  75.  
  76. return $salida;
  77. }

Última edición por cabrejae; 11/01/2015 a las 23:30
  #9 (permalink)  
Antiguo 12/01/2015, 00:53
 
Fecha de Ingreso: enero-2015
Ubicación: Buenos Aires
Mensajes: 6
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: Problemas en PHP con consultas a Mysql

bueno encontre el problema lo dejo por si le pasa a otro, vi que Gonzalo García Correas
esta en otro tema del foro, ahora si lo encuentro le contesto mi solución.
lo que yo hice fue:

cambie la forma de hacer la consulta a la BD

Código PHP:
Ver original
  1. //ANTES
  2. //$consulta = $linkDB -> query("CALL sp_afiliados");  
  3. //AHORA
  4. $consulta = mysqli_query($linkDB,"CALL sp_afiliados");


y antes de hacer el return con el resultado de la funcion agregue estas dos lineas.

Código PHP:
Ver original
  1. mysqli_next_result($linkDB); //Prepara el siguiente juego de resultados de una llamada
  2. mysqli_free_result($linkDB); //Libera la memoria asociada al resultado.
  3. return $salida;

Etiquetas: mysql+php
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 14:49.