繁体   English   中英

无法使用PHP从Users数据库(mysql)检索名称

[英]Cannot retrieve name from Users database (mysql) using PHP

我正在尝试显示"Welcome back, <name>." 当我重新登录时访问我的博客。 我正在使用php访问数据库,获取当前在$_SESSION['username']中的用户名的名称和姓氏,然后将其打印回索引中。

因此查询数据库的函数是:

 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;
  }

然后是html调用上面函数的部分:

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

以上代码的输出为:

 Welcome back, .

var_dump($ real)给出:

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

更改为mysql_fectch_assoc后的var_dump($ real):

array(0) { }
  • 修正:错误未使用单引号'{$ username}'

通过更改它们,它就像一种魅力一样,为所有人欢呼!

奇怪的是,您正在使用mysql_num_rows来获取查询结果。 这只会返回行数。 使用mysql_fetch_assoc获得结果的关联数组会更好。

您还需要将反引号更改为查询中{$username}周围的单引号。

就像是:

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;
}

您的get_full_name()函数应如下所示:

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;
}

笔记:

  • 使用单引号将变量: '{$username}'而不是`{$username}`
  • 使用mysql_num_rows()检查结果是否为空。
  • 使用mysql_fetch_assoc()检索行。

调用函数:

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

笔记:

  • 使用$real代替$real[]
  • count()检查$real是否$real空。

更改此行$row = mysql_fetch_array($query);

我看到两个问题。

1)您正在使用mysql_num_rows ,而不是从数据库中获取数据数组。

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)看起来$real是代码中的多维数组。 尝试以下方法:

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

注意,我在$real末尾删除了[]

使用mysql_query()获取运行查询的结果,然后使用mysql_fetch_assoc()获取单个行。

$result = mysql_query($query);

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

注意,mysql_num_rows($ result)将返回给定结果中的行数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM