0

Hola estoy haciendo una funcion php para mostrar unos datos de la DB, tengo una variable de conexion con la DB fuera de una funcion, y la consulta dentro de un funcion, para que en la funcion 'lea' la variable utilice global

<?php
  $conexion = new mysqli("","","","");
  if (!$conexion) {
    die("Error al conectar con la base de datos: ".$conexion->connect_error);
  }
  function mostrar_datos(){
     global $conexion;
     $result = $conexion->query($sql);
     if ($result->num_rows > 0) {
        while ($row = $result->fetch_assoc()) {
            //mostrar datos
        }
     }else{
       echo "No hay mensajes";
     }    
   } 
   $conexion->close();
?>
<div id="chat">
    <?php echo mostrar_datos(); ?>
</div>

Lo estraño es que me imprima 'No hay mensajes' cuando sí hay datos en la DB. Y cuyo error creo que se debe a global $conexion.

Gracias.

cleanet
  • 95
  • 1
  • 12
  • 3
    así de primeras no tienes definida la variable $sql, por lo que es muy posible que te este dando error la consulta, o te este devolviendo 0 rows (por eso te saltaria el else) – Jakala Sep 13 '18 at 09:23

2 Answers2

2

Aparte de no tener la variable $sql declarada como te comenta @Jakala, estás abriendo la conexión con la base de datos, luego defines la función mostrar_datos pero después cierras dicha conexión. Cuando es momento de llamar a la función mostrar_datos, la conexión ya está cerrada. Prueba a cambiar tu código por este:

<?php
  function mostrar_datos(){
      $conexion = new mysqli("","","","");
      if (!$conexion) {
        die("Error al conectar con la base de datos: ".$conexion->connect_error);
      }
      $result = $conexion->query($sql);
      if ($result->num_rows > 0) {
        while ($row = $result->fetch_assoc()) {
            //mostrar datos
        }
      } else {
        echo "No hay mensajes";
      }    
      $conexion->close();
   } 
?>
<div id="chat">
    <?php echo mostrar_datos(); ?>
</div>
Javi Mollá
  • 1,438
  • 1
  • 6
  • 9
  • @cat_12 Este es uno de los problemas de usar global, se crean dependencias escondidas que llevan a confusión. Recomendaría al OP revisar esta pregunta: [¿Cuál es el uso correcto de las funciones y variables globales?](https://es.stackoverflow.com/questions/97573/cu%c3%a1l-es-el-uso-correcto-de-las-funciones-y-variables-globales/100319#100319) – Xerif Sep 13 '18 at 10:57
0

Muchas gracias el error era ese que cerraba la conexion, pero no entiendo... ¿No se ejecuta linea por linea?, porque si es así, se ejecutaría la conexión, el function y por último tocaria cerrar la conexion. O es que ejecuta primero lo fuera de la funcion y despues la funciones que hay?

Como es eso?

Solución:

<?php
  $conexion = new mysqli("sql113.260mb.net","n260m_20445422","jyEsRoXZ","n260m_20445422_GTE");
  if (!$conexion) {
    die("Error al conectar con la base de datos: ".$conexion->connect_error);
  }
  function mostrar_datos(){
    global $conexion;
    $mostrardatossql = "SELECT * FROM chat_do";
    $result = $conexion->query($mostrardatossql);
    $listas = $result->num_rows;
    if ($result->num_rows > 0) {
        while ($row = $result->fetch_assoc()) {
          echo "<div id='chat_do2'>";
          echo "<div id='datos-chat-do'>";
          echo "<table>";
          echo "<tr>";
          echo "<td id='mensaje1'>".$row['mensaje']."</td>";
          echo "<td rowspan='2' id='mensaje-info'>".$row['clase']." ".$row['hora']."<br>".$row['fecha']."</td>";
          echo "</tr>";
          echo "<tr>";
          echo "<td>".$row['multimedia']."</td>";
          echo "</tr>";
          echo "</table>";
          echo "</div>";      
          echo "</div>";
          echo $result->num_rows;
        }
   }else{
     echo "No hay mensajes";
   }        
 }

?>

cleanet
  • 95
  • 1
  • 12