首页 > 解决方案 > 准备好的语句回显 JSON 编码将结果变为空

问题描述

if(isset($_POST["id"])){  
    $stmt = $mysqli->prepare("SELECT * FROM account WHERE id = ?");
    $stmt->bind_param("s", $_POST["id"]);
    $stmt->execute();
    $row = $stmt->get_result();
    
    echo json_encode($row);
}  

由于某种原因,结果为空并产生此错误。尝试访问 null 类型值的数组偏移量

我究竟做错了什么?我发现似乎没有任何效果。

标签: phpmysqliprepared-statement

解决方案


调用$stmt->get_result();只是将结果从mysqli_stmt对象获取到mysqli_result对象中,您仍然必须将结果行作为单独的调用获取

if(isset($_POST["id"])){  
    $stmt = $mysqli->prepare("SELECT * FROM account WHERE id = ?");
    $stmt->bind_param("s", $_POST["id"]);
    $stmt->execute();
    $result = $stmt->get_result();
    
    //You still need some version of a FETCH after $stmt->get_result();
    $row = $result->fetch_assoc();

    echo json_encode($row);
}  

推荐阅读