Php 函数将所有值返回为null,即使它们不是空值

Php 函数将所有值返回为null,即使它们不是空值,php,arrays,mysqli,Php,Arrays,Mysqli,这个函数应该从我的数据库表中获取信息,将它们添加到数组中并显示给我(我现在正在使用Postman进行测试) 但是,不是返回正常值,而是出于未知原因将所有值都设置为null,至少对我来说是这样 DbOperations.php function getPersonChanges_made($login_token){ $stmt = $this->con->prepare("SELECT id, first_name, last_name, login_token, time_

这个函数应该从我的数据库表中获取信息,将它们添加到数组中并显示给我(我现在正在使用Postman进行测试)

但是,不是返回正常值,而是出于未知原因将所有值都设置为null,至少对我来说是这样

DbOperations.php

function getPersonChanges_made($login_token){
    $stmt = $this->con->prepare("SELECT id, first_name, last_name, login_token, time_started, time_ended, todays_worktime FROM changes_made WHERE login_token = ? ");
    $stmt->bind_param("s", $login_token);
    $stmt->execute();
    $arrs = array(); 

    while($row = $stmt->fetch()) {
        $arr  = array();
        $arr['id'] = $row['id'];
        $arr['first_name'] = $row['first_name'];
        $arr['last_name'] = $row['last_name'];
        $arr['login_token'] = $row['login_token'];
        $arr['time_started'] = $row['time_started'];
        $arr['time_ended'] = $row['time_ended'];
        $arr['todays_worktime'] = $row['todays_worktime'];

        array_push($arrs, $arr);
    }

    return $arrs;  
}
Api.php

case 'getpersonchanges_made':
    isTheseParametersAvailable(array('login_token'));
    $db = new DbOperation();
    $result = $db->getPersonChanges_made($_POST['login_token']);

    if($result){
        $response['error'] = false; 
        $response['message'] = 'success';
        $response['arrs'] = $result;
    }else{
        $response['error'] = true; 
        $response['message'] = 'Some error occurred please try again';
    }
    break;
以下是我得到的结果:

“id”:null,“first\u name”:null,“last\u name”:null,“login\u token”:null,“time\u start”:null,“time\u ended”:null,“todays\u worktime”:null

返回一个布尔值。您可能正在查找,但不能直接在语句上调用它,只能在结果对象上调用它。例如:

$result = $stmt->get_result();
while($row = $result->fetch_assoc()) {
还有另一种选择,可能更简单

foreach($stmt->get_result() as $row) {
更新 正如@NigelRen所说,您也可以直接返回的结果,因为您在循环中所做的只是从一个数组移动到另一个数组,而不做任何更改。您的功能将变得更简洁、更短:

function getPersonChanges_made($login_token) {
    $stmt = $this->con->prepare("SELECT id, first_name, last_name, login_token, time_started, time_ended, todays_worktime FROM changes_made WHERE login_token = ? ");
    $stmt->bind_param("s", $login_token);
    $stmt->execute();
    return $stmt->get_result()->fetch_all(\MYSQLI_ASSOC);
}
返回一个布尔值。您可能正在查找,但不能直接在语句上调用它,只能在结果对象上调用它。例如:

$result = $stmt->get_result();
while($row = $result->fetch_assoc()) {
还有另一种选择,可能更简单

foreach($stmt->get_result() as $row) {
更新 正如@NigelRen所说,您也可以直接返回的结果,因为您在循环中所做的只是从一个数组移动到另一个数组,而不做任何更改。您的功能将变得更简洁、更短:

function getPersonChanges_made($login_token) {
    $stmt = $this->con->prepare("SELECT id, first_name, last_name, login_token, time_started, time_ended, todays_worktime FROM changes_made WHERE login_token = ? ");
    $stmt->bind_param("s", $login_token);
    $stmt->execute();
    return $stmt->get_result()->fetch_all(\MYSQLI_ASSOC);
}

这可能不是问题的根源(虽然可能是),而是$response['arrs']=$db->getPersonChanges\u make($\u POST['login\u token');->只需使用:->$response['arrs']=$result。。。。因此,您不必执行整个操作两次。感谢您提供的提示,但是问题仍然存在,请使用您修改的代码解决问题。您确定该行有值吗?尝试
var\u转储($row)在循环中查看它包含的内容。这可能不是问题的根源(可能是),而是$response['arrs]=$db->getPersonChanges\u make($\u POST['login\u token']);->只需使用:->$response['arrs']=$result。。。。因此,您不必执行整个操作两次。感谢您提供的提示,但是问题仍然存在,请使用您修改的代码解决问题。您确定该行有值吗?尝试
var\u转储($row)在循环中查看它包含的内容。您还可以添加using,因为它可以避免循环。@NigelRen感谢我将您的建议添加到回答中您也可以添加using,因为它可以避免循环。@NigelRen感谢我将您的建议添加到回答中