尝试在登录后显示用户信息

时间:2013-09-07 14:09:18

标签: php mysql

我正在尝试在登录后在个人资料页面上显示用户信息。以下是我正在使用的代码:

<?php
require_once('connection.inc.php');
$conn = dbConnect('read');
// get the username's details from the database
$sql = ("SELECT firstname, lastname FROM members WHERE username ='".$_SESSION['username']."'");
$_SESSION['firstname'] = 'firstname';
$_SESSION['lastname'] = 'lastname';
// initialize and prepare statement
$stmt = $conn->stmt_init();
$stmt->prepare($sql);
// bind the result,
$stmt->bind_result($_SESSION['firstname'], $_SESSION['lastname']);
$stmt->execute();
$stmt->fetch();

代码运行时没有任何错误,但在配置文件页面上,结果显示为: 名字:名字 姓氏:姓氏

而不是插入应该从数据库中提取的信息。

配置文件页面本身的显示代码是正确的,因为我可以从用户登录页面设置上面的会话变量,并且它们可以正常工作。我只是不想在登录时提取所有信息,如果用户不打算用它做任何事情。谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

来自php手册的引文:

  

请注意,所有列必须在mysqli_stmt_execute()之后和调用mysqli_stmt_fetch()之前绑定。根据列类型,绑定变量可以静默地更改为相应的PHP类型。

请参阅http://php.net/manual/en/mysqli-stmt.bind-result.php

所以就这样说吧:

$stmt->execute();
$stmt->bind_result($_SESSION['firstname'], $_SESSION['lastname']);
$stmt->fetch();

答案 1 :(得分:0)

好的,您的代码存在许多问题。

正如artiifix已经提到的,您只能在执行查询后绑定结果。但是,最好使用参数使用预准备语句。

此外,您将$_SESSION['firstname']设置为 firstname ,将$_SESSION['lastname']设置为 lastname ,这就是您获得该输出的原因。您可以删除这些代码行。

<?php
require_once('connection.inc.php');
$conn = dbConnect('read');
// get the username's details from the database
$sql = "SELECT firstname, lastname FROM members WHERE username=?";
/* See this? I've put a parameter in the query.
 * You need to do this in order to prepare a statement.
 */

// initialize and prepare statement
$stmt = $conn->stmt_init();
$stmt->prepare($sql);

// Bind parameters and execute the query
$stmt->bind_param("s", $_SESSION['username']);
$stmt->execute();

// Next, bind the results to the variables.
$stmt->bind_result($_SESSION['firstname'], $_SESSION['lastname']);

$stmt->fetch();

[...]

此外,如果上面的代码是你的php脚本的顶部,你需要打开会话来访问会话变量!

<?php

session_start();

require_once('connection.inc.php');
$conn = dbConnect('read');

[...]

而且,为了进一步简化:如果用户已登录,并且会话变量已经设置,则无需再次获取它们。

<?php
session_start();
echo $_SESSION['firstname'] . ' ' . $_SESSION['lastname'];

[...]
相关问题