【问题标题】:Retrieving sql database information with PHP prepared statements [closed]使用 PHP 准备语句检索 sql 数据库信息 [关闭]
【发布时间】:2020-09-09 17:38:52
【问题描述】:

我希望在表中找到用户名,并获取完整的名字和姓氏,连接并绑定到一个变量 ($usernames)。这是一个较大的登录文件的代码 sn-p,其中定义了 $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"];

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

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

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

【问题讨论】:

  • 绑定结果后需要在while循环中使用mysqli_stmt_fetch($stmt)获取结果。请参阅此处的示例 #2 程序样式:php.net/manual/en/mysqli-stmt.bind-result.php THEN 学习面向对象的样式并开始这样做。
  • 我发现人们普遍认为PDOmysqli_* 更易于使用。如果你很难掌握mysqli_*,我建议切换到PDO
  • 你永远不会从服务器获取任何东西。您必须使用get_result() 才能获得结果。
  • 感谢大家,代码现在可以工作,但我正在寻找 PDO 和面向对象作为处理更大代码部分的更好方法,我很快就会需要!

标签: php mysql mysqli prepared-statement


【解决方案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 会快得多。

【讨论】:

  • 谢谢达曼!看看你的代码,这是否使用了面向对象的风格?如果是这样,我可以将它与我在程序上创建的数据库链接结合起来吗?
  • 是的,是的。但 OO 风格更具可读性。为便于阅读,请勿混合使用。
【解决方案2】:

在这一行之后:

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

添加:

mysqli_stmt_fetch($stmt);

然后:

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

【讨论】:

  • 谢谢哈杜德!这解决了我的问题! :)
  • 很高兴为您提供帮助。所以请在答案的左上角找到正确的标记并点击它说它是正确的:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多