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

时间:2012-06-12 10:53:38

标签: php mysql

我正在尝试在登录时向我的博客显示"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}”

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

5 个答案:

答案 0 :(得分:2)

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

您还需要在查询中将{44}的单引号更改为单引号。

类似的东西:

{$username}

答案 1 :(得分: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()

答案 2 :(得分:0)

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

答案 3 :(得分: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

答案 4 :(得分:0)

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

$result = mysql_query($query);

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

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