2016-08-13 14 views
1

準備された文を使用するために変更するまで、私はMySQLのクエリを使用していました。私はこのエラーを取得するのはなぜ は、私が理解することはできません。PHP:なぜmysqli_fetch_assoc()がうまくいかないのですか?私はmysqli_stmt_get_result()を使用しています

$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']; 
... 

がなぜ機能していません。

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

を(フォームでこのログの)クエリが一つだけ結果を返す必要がありますか?クエリー自体は、ユーザー名電子メール、パスワード(実際にハッシュ値、実際の役割)、ロールなどを含む配列を返します。

答えて

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_resultmysqli_resultmysqli_stmt引数を取り、返します。

mysqli_result mysqli_stmt_get_result (mysqli_stmt $stmt)

mysqli_fetch_assocmysqli_resultを取ります

array mysqli_fetch_assoc (mysqli_result $result)

0

mysqli_stmt_execute()を使用する場合、mysqli_stmt_fetch追加のクエリを実行する前にデータをフェッチする必要があります。 Official Doc

while (mysqli_stmt_fetch($stmt)) { 

} 
1

ドキュメント(https://secure.php.net/manual/en/mysqli-stmt.get-result.php)によると、これはあなたのコードスニペットで$ stmtが$ buscarUsuarioであるmysqliのプリペアドステートメントを使用する方法です:

mysqli_stmt_execute($stmt); 
$result = mysqli_stmt_get_result($stmt); 
$row = mysqli_fetch_array($result, MYSQLI_NUM); 
関連する問題