No se puede recuperar el nombre de la base de datos de usuarios (mysql) usando PHP

Estoy tratando de mostrar un "Welcome back, <name>." a mi blog cuando vuelva a iniciar sesión. Estoy usando php para acceder a la base de datos, obtener el nombre y apellido del nombre de usuario actualmente en $_SESSION['username']y, a continuación, imprímalo de nuevo en el archivo index.

Así que la función para consultar la base de datos es:

 function get_full_name($username){

    $real = array();

    $query = mysql_query("SELECT `name`, `last` FROM `users` WHERE `user` = `{$username}`");

    $row = mysql_num_rows($query);

    foreach($row as $k => $v)
    {
        $real[$k] = $v;
    }

       return $real;
  }

Luego, la parte del html donde llama a la función anterior:

<div id="menu">
    <?php 
            $temp = $_SESSION['username'];
            $real[] = get_full_name($temp);
            if(isset($_SESSION['username']))
            {
                echo '<br />'.'Welcome back, '. $real['name'] . '.';
            }
    ?>
    </div>

La salida de los códigos anteriores es:

 Welcome back, .

var_dump($real) da:

array(1) { [0]=> array(0) { } } 

var_dump($real) después de cambiar a mysql_fectch_assoc:

array(0) { }
  • Solucionado: el error no estaba usando las comillas simples ' {$ nombre de usuario} '

Al cambiarlos, funcionó a las mil maravillas, ¡salud a todos!

preguntado el 12 de junio de 12 a las 11:06

prueba var_dump($real) para ver qué índices tiene. Me parece recordar que mysql_num_rows es la función incorrecta si desea recuperar una matriz asociativa. -

Continúe y acepte la respuesta de Incarnate: es la correcta. -

Hice lo que dice la respuesta, pero aún no funciona. -

¿Has hecho var_dump después de usar mysql_fetch_assoc? Es una buena forma de confirmar que funciona y de ver lo que realmente obtiene de sus índices. -

Acabo de agregar el nuevo var_dump, ¡salud! -

5 Respuestas

curiosamente estas usando mysql_num_rows para obtener los resultados de su consulta. Esto solo devolverá el número de filas. Estarás mejor usando mysql_fetch_assoc para obtener la matriz asociativa de resultados.

También necesita cambiar sus acentos graves a comillas simples alrededor {$username} en la consulta.

Algo como:

function get_full_name($username){

    $real = array();

    $query = mysql_query("SELECT `name`, `last` FROM `users` WHERE `user` = '{$username}'");

    $row = mysql_fetch_assoc($query);

    foreach($row as $k => $v)
    {
        $real[$k] = $v;
    }

    return $real;
}

Respondido el 12 de junio de 12 a las 12:06

De alguna manera esto no funciona, todavía no me muestra el nombre impreso, pero no entendía por qué antes no funcionaba en absoluto, esto parece lógico pero aún no funciona para mí =/, debe estar haciendo algo más, ¿no? - escritor nulo

Consulte también la solución de Nick, debe eliminar el [] de $real[] = get_full_name($temp); ¡bsdnoobz tiene una descripción aún más completa! - John C

¡¡Sí, funcionó!! ¡Entonces el error fue solo las comillas ` {$username} ` en lugar de '{$username}'! ¡Muchas gracias! - escritor nulo

Tus get_full_name() la funcion deberia ser asi:

function get_full_name($username) {
   $real  = array();
   $query = mysql_query("SELECT `name`, `last` 
                         FROM `users` 
                         WHERE `user` = '{$username}'");
   if (mysql_num_rows($query)) {
     $real = mysql_fetch_assoc($query);
   }

   return $real;
}

Notas

  • Use comillas simples para la variable: '{$username}' en lugar de `{$username}`
  • Utiliza mysql_num_rows() para comprobar si el resultado no está vacío.
  • Utiliza mysql_fetch_assoc() para recuperar la fila.

Llamar a la función:

$temp = $_SESSION['username'];
$real = get_full_name($temp);
if (isset($temp) && count($real)) {
   echo '<br />Welcome back, '. $real['name'] . '.';
}

Notas

  • Utiliza $real en lugar de $real[].
  • Comprobar si $real vacío con count().

Respondido el 12 de junio de 12 a las 12:06

Cambia esta linea $row = mysql_fetch_array($query);

Respondido el 12 de junio de 12 a las 11:06

Veo dos problemas.

1) Estás usando mysql_num_rows, sin obtener la matriz de datos de la base de datos.

function get_full_name($username){

    $real = array();

    $query = mysql_query("SELECT `name`, `last` FROM `users` WHERE `user` = `{$username}`");

    $row = mysql_fetch_assoc($query);

    foreach($row as $k => $v)
    {
        $real[$k] = $v;
    }

    return $real;
}

2) parece $real es una matriz multidimensional en su código. Prueba esto en su lugar:

<div id="menu">
    <?php 
            $temp = $_SESSION['username'];
            $real = get_full_name($temp);
            if(isset($_SESSION['username']))
            {
                echo '<br />'.'Welcome back, '. $real['name'] . '.';
            }
    ?>
    </div>

Observe que eliminé el [] al final de $real.

Respondido el 12 de junio de 12 a las 12:06

Use mysql_query() para obtener el resultado de ejecutar la consulta, luego use mysql_fetch_assoc() para obtener filas individuales.

$result = mysql_query($query);

while ($row = mysql_fetch_assoc($result))
{
   var_dump($row);
}

Tenga en cuenta que mysql_num_rows($result) devolverá el número de filas en un resultado dado.

Respondido el 12 de junio de 12 a las 12:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.