Php 我可以从mysqli_stmt_bind_result获取结果而不必循环吗?

Php 我可以从mysqli_stmt_bind_result获取结果而不必循环吗?,php,mysqli,Php,Mysqli,作为参考,我创建了: $conn = new mysqli($host, $user, $password, $database) or die("Error " . mysqli_error($link)); $userID = json_decode(file_get_contents('php://input'), true)["userID"]; $sql = "SELECT name FROM users WHERE id = ?"; $st

作为参考,我创建了:

$conn = new mysqli($host, $user, $password, $database) or die("Error " . mysqli_error($link));

$userID = json_decode(file_get_contents('php://input'), true)["userID"];

$sql = "SELECT name
          FROM users
         WHERE id = ?";

$stmt = mysqli_prepare($conn, $sql);

if ($stmt) {
  mysqli_stmt_bind_param($stmt, "i", $userID);

  if (mysqli_stmt_execute($stmt)) {
    mysqli_stmt_store_result($stmt);

    if (mysqli_stmt_num_rows($stmt) > 0) {
      mysqli_stmt_bind_result($stmt, $name);

      while (mysqli_stmt_fetch($stmt)) {
        if ($name != "") {
          echo '{"name": ' . $name . '}';
        } else {
          echo '{"name": "Anonymous" }';
        }
      }
    }
  }
}
按照现在的方式,它可以获取用户名

然而,当我知道我的查询只返回一行时,我不愿意使用while循环,因此我寻找了不使用循环来获取值的方法,但找不到任何方法


我试图删除while循环只是为了看看会发生什么,但它无法获取用户名。有没有一种方法可以在不使用循环的情况下使用
mysqli\u stmt\u bind\u result
获得查询结果?如果没有,还有什么我可以用来做我想做的吗?

是的,当你只需要一行,并且知道它只会返回那一行,要返回,你不需要循环任何东西-这是多余的

您可以删除
while
-循环,但仍然需要参数
mysqli\u stmt\u fetch($stmt)
来实际获取结果

if ($stmt = mysqli_prepare($mysqli, $sql)) {
    mysqli_stmt_bind_param($stmt, "i", $userID);

    if (mysqli_stmt_execute($stmt)) {
        mysqli_stmt_store_result($stmt);

        if (mysqli_stmt_num_rows($stmt) > 0) {
            mysqli_stmt_bind_result($stmt, $name);

            mysqli_stmt_fetch($stmt);
            if (!empty($name)) {
                echo '{"name": ' . $name . '}';
            } else {
                echo '{"name": "Anonymous" }';
            }
        } else {
            // No results!
            echo "No results";
        }
    }
}

酷,这正是我想知道的。另一方面,我注意到您在
上使用了
empty
函数=操作员。有什么原因吗?基本上是一样的,但我发现
empty()
更容易阅读。还有什么你想知道的,就说出来;-)当您在PHP.net上查找正在使用的函数时,也有很多很好的示例:-)