0

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

<?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();

代码运行没有任何错误,但在个人资料页面上,结果显示为:名字:名字姓氏:姓氏

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

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

4

2 回答 2

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();
于 2013-09-07T14:14:21.737 回答
0

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

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

此外,您设置$_SESSION['firstname']firstnamelastname$_SESSION['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'];

[...]
于 2013-09-07T14:36:36.967 回答