我正在尝试在登录后在个人资料页面上显示用户信息。以下是我正在使用的代码:
<?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();
代码运行时没有任何错误,但在配置文件页面上,结果显示为: 名字:名字 姓氏:姓氏
而不是插入应该从数据库中提取的信息。
配置文件页面本身的显示代码是正确的,因为我可以从用户登录页面设置上面的会话变量,并且它们可以正常工作。我只是不想在登录时提取所有信息,如果用户不打算用它做任何事情。谢谢你的帮助。
答案 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'];
[...]