mysqli_fetch_assoc() 发出警告,它需要 mysqli_result,但给出了对象

mysqli_fetch_assoc() is giving a warning that it wants mysqli_result, but object given

我正在尝试使用准备语句从数据库中获取一些数据并遇到这个问题。

这是我的代码

function find_subject_by_id($id){
    global $db;

    $sql = "SELECT * FROM subjects ";
    $sql .= "WHERE id=?";
    //echo $sql;

    /*Create a Prepared statement */
    $result = mysqli_prepare($db, $sql);
    confirm_result_set($result);

    /*bind PARAMETERS for markers */
    mysqli_stmt_bind_param($result, 'i', $id);

    /* execute query */
    mysqli_stmt_execute($result);

    /*bind result variables*/
    mysqli_stmt_bind_result($result, $id, $menu_name, $position, $visible);

    /*fetch value*/
    mysqli_stmt_fetch($result);

    $subject = mysqli_fetch_assoc($result); //the warning is here

    /*close connection*/
    mysqli_stmt_close($result);
    return $subject; //returns an assoc array
  }

我对准备陈述和学习还很陌生,有人可以帮我找出我在这里遗漏了什么。 如果问题看起来重复或愚蠢,请不要介意。谢谢!

通过使用 mysql_stmt_bind_result,您可以将特定列绑定到您指定的变量。 然后你可以像这样获取结果

while(mysqli_stmt_fetch($result)){
    printf ("%s\n", $menu_name);
}

或使用您绑定的任何其他变量。

编辑:

您可以将语句用作关联数组:

$mysqliresult = mysqli_stmt_get_result($result);

这会将其转换为 MySqliResult 之后你可以做

$subject = mysqli_fetch_assoc($mysqliresult);

获取关联数组