0

"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} '

通过改变它们,它就像一个魅力,向所有人欢呼!

4

5 回答 5

2

奇怪的是,您正在使用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;
}
于 2012-06-12T10:59:25.637 回答
1

你的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[].
  • 用 .检查是否$real为空count()
于 2012-06-12T11:16:17.140 回答
0

我看到的两个问题。

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.

于 2012-06-12T11:01:52.713 回答
0

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

$result = mysql_query($query);

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

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

于 2012-06-12T11:02:36.340 回答
0

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

于 2012-06-12T10:59:03.453 回答