用PHP编写的语句检索sql数据库信息[已关闭]。

问题描述 投票:0回答:1

我想在表中找到用户名,然后取全名和姓,连接并绑定到一个变量($usernames)。这是一个更大的登录文件中的一段代码,在这个文件中定义了$link等,并且连接是有效的。

$param_username = "x";
$users_fname = $users_sname = "";
$sql = "SELECT users_fname, users_sname FROM users WHERE users_username = ?";
$stmt = mysqli_prepare($link, $sql);
mysqli_stmt_bind_param($stmt, "s", $param_username);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $users_fname, $users_sname);
$usernames = $users_fname . $users_sname;

$_SESSION["username"] = $usernames;
echo  $_SESSION["username"];

有谁能发现我哪里做错了?

当直接在数据库上运行时,正在执行的语句似乎能很好地返回rowcolumns,也就是说,在数据库上运行时,可以返回rowcolumns。

SELECT users_fname, users_sname FROM users WHERE users_username = 'x';
php mysql prepared-statement
1个回答
1
投票

在这行之后,:

mysqli_stmt_bind_result($stmt, $users_fname, $users_sname);

添加。

mysqli_stmt_fetch($stmt);

然后:

 $usernames = $users_fname . $users_sname;
 $_SESSION["username"] = $usernames;
 echo  $_SESSION["username"];

1
投票

你从来没有从服务器上获取任何东西。你必须使用 get_result() 来获得结果。

$param_username = "x";
$sql = "SELECT CONCAT(users_fname, users_sname) AS fullname FROM users WHERE users_username = ?";
$stmt = $link->prepare($sql);
$stmt->bind_param("s", $param_username);
$stmt->execute();
$data = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);
$_SESSION["username"] = $data[0]['fullname'];

我不建议使用 bind_result()但如果你想用这个函数来做,那么你可以用下面的方法来做。

$param_username = "x";
$sql = "SELECT CONCAT(users_fname, users_sname) AS fullname FROM users WHERE users_username = ?";
$stmt = $link->prepare($sql);
$stmt->bind_param("s", $param_username);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($_SESSION["username"]);
$stmt->fetch(); // execute for each row if you have more than 1

使用PDO会快很多

© www.soinside.com 2019 - 2024. All rights reserved.