使用 PHP 预准备语句检索 sql 数据库信息



我想在表格中找到用户名并获取全名和姓氏,连接并绑定到变量($usernames(。这是来自较大登录文件中的代码片段,其中定义了 $link etc,并且连接正在工作:

$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"];

谁能发现我可能做错了什么?

当直接在数据库上运行时,正在执行的语句似乎可以很好地返回行/列,即:

SELECT users_fname, users_sname FROM users WHERE users_username = 'x';

在此行之后:

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

加:

mysqli_stmt_fetch($stmt);

然后:

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

你永远不会从服务器获取任何内容。您必须使用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,这会快得多。

最新更新