2016-08-13 191 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)) { 

}