2016-08-13 51 views
1

我有一個正在處理的MySQL查詢,直到我改變它爲了使用預處理語句。 我想不通爲什麼我得到這個錯誤:PHP:爲什麼mysqli_fetch_assoc()不起作用?我正在使用mysqli_stmt_get_result()

mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, object given

查詢(此日誌中的表格)應只返回一個結果:

$conectar = mysqli_connect(localhost, USER, PASS, DATABASE); 

    //from the log in form 
    $email = $_POST['email']; 
    $clave = $_POST['clave']; 

//this should get me just one result: the user to which the email belongs. 
    $consulta = "SELECT usuarios.userID, usuarios.userPass, usuarios.userEmail, usuarios.userPass, usuarios.userFechaGeneracion, usuarios.userNombres, rolesUsuarios.nombreRol, 
       GROUP_CONCAT(rolesUsuarios.nombreRol SEPARATOR '|') AS roles 
       FROM rolesUsuarios, usuarios 
       WHERE usuarios.userEmail=? 
       AND rolesUsuarios.userID = usuarios.userID 
       GROUP BY usuarios.userID 
       "; 
    $buscarUsuario = mysqli_prepare($conectar,$consulta); 
    mysqli_stmt_bind_param($buscarUsuario, 's', $email); 
    mysqli_stmt_execute($buscarUsuario); 

     if (mysqli_stmt_get_result($buscarUsuario)) { 
      $row = mysqli_fetch_assoc($buscarUsuario); 
      $originalPass = $row['userPass']; 
... 

爲什麼不工作?查詢本身應返回一個包含用戶名電子郵件,密碼(實際上是散列值),他的角色等的結果的數組。

回答

1

你接近:

// vvvvvvv--- this is missing 
    if ($result = mysqli_stmt_get_result($buscarUsuario)) { 
     $row = mysqli_fetch_assoc($result); 
     //      ^^^^^^^--- & needs to be used here 

的原因是,$buscarUsuario是一個語句的「把手」,不是實際的結果從數據庫設置。您使用該「句柄」來獲取實際的結果集。以下使用的文檔的邏輯的蹤跡:

mysqli_stmt_get_result需要mysqli_stmt參數,並返回mysqli_result

mysqli_result mysqli_stmt_get_result (mysqli_stmt $stmt)

mysqli_fetch_assoc需要mysqli_result

array mysqli_fetch_assoc (mysqli_result $result)

0

當使用mysqli_stmt_execute()時,mysqli_stmt_fetch()函數必須用於在執行任何其他查詢之前獲取數據。 Official Doc

while (mysqli_stmt_fetch($stmt)) { 

} 
相關問題