1

我正在创建一个函数,假设从数据库中获取名字和姓氏并返回查询。不过有些不对劲。

名字和姓氏不显示。我没有收到任何错误或警告,我已经尝试了本网站和其他网站上提供的所有答案(虽然不多)。

有人能告诉我它有什么问题吗?

public function getFirstAndLastName() {

    $username = $this->user['username'];

    $query = $this->con->prepare("SELECT first_name, last_name FROM users WHERE username = ? ");
    $query->bind_param("s", $username);
    $query->execute();
    $query_result = $query->get_result();
    $query_result->fetch_array();
    while ($row = $query_result->fetch_assoc()) {

        $row['first_name'];
    }

    return $row;
}
4

2 回答 2

1

首先,如果你想找到一种更好的方法,你可以使用这个

public function getFirstAndLastName() {

    $username = $this->user['username'];

    $query = $this->con->prepare("SELECT first_name, last_name FROM users WHERE username = ? ");
    $query->bind_param("s", $username);
    $query->execute();
    $query_result = $query->get_result();
    $result = $query_result->fetch_all(MYSQLI_ASSOC);
    Return $result;
}

mysqli 有一个方便的函数,可以立即从查询结果中返回一个数组:mysqli_fetch_all()。所以代替这条线

while ($row = $query_result->fetch_assoc()) {

        $row['first_name'];
    }

它可能只是一行:

$result = $query_result->fetch_all(MYSQLI_ASSOC);

如果您正在寻找答案,为什么您的函数将返回 null,我将为您解释:

您的代码中有一些错误

首先,当您执行此行时$query_result->fetch_array();

实际上,您只需清空 mysqli 缓冲区!所以你在缓冲区中没有任何东西可以在这一行中捕获它->while ($row = $query_result->fetch_assoc()) {

另一方面,即使您在缓冲区中有一些东西,那么您也不会在这一行中什么都不做-> $row['first_name'];

如果你想更正你的代码,你应该像这样编写代码 -> 首先在这一行注释 ->$query_result->fetch_array();

public function getFirstAndLastName() {

    $username = $this->user['username'];

    $query = $this->con->prepare("SELECT first_name, last_name FROM users WHERE username = ? ");
    $query->bind_param("s", $username);
    $query->execute();
    $query_result = $query->get_result();
    //$query_result->fetch_array();
    while ($row = $query_result->fetch_assoc()) {

       $result[] =  $row['first_name'];
    }

    return $result;
}

编辑:

如果您希望同时获得名字和姓氏,则必须这样做->

public function getFirstAndLastName() {

    $username = $this->user['username'];

    $query = $this->con->prepare("SELECT first_name, last_name FROM users WHERE username = ? ");
    $query->bind_param("s", $username);
    $query->execute();
    $query_result = $query->get_result();
    //$query_result->fetch_array();
    while ($row = $query_result->fetch_assoc()) {

       $result[] =  $row;
    }

    return $result;
}
于 2020-07-17T01:39:02.347 回答
-2

尝试使用 $query->bind_param(":username", $username)

并在查询中更改?作者:respuesta

“从用户中选择名字,姓氏,其中用户名=:用户名

为我糟糕的英语寻找文档和道歉 https://www.php.net/manual/es/pdostatement.bindparam.php

于 2020-07-17T01:10:17.113 回答