2016-08-13 6 views
1

Ich habe eine MySQL-Abfrage, die funktionierte, bis ich es änderte, um vorbereitete Anweisungen zu verwenden. Ich kann nicht erklären, warum ich diesen Fehler erhalte:PHP: Warum mysqli_fetch_assoc() wird nicht funktionieren? Ich verwende mysqli_stmt_get_result()

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

Die Abfrage (dieses Protokoll in Form) sollte nur ein Ergebnis zurück:

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

Warum nicht funktioniert? Die Abfrage selbst sollte ein Array mit diesem Ergebnis zurückgeben, das die Benutzername-E-Mail, das Passwort (ein Hash-Wert, tatsächlich), seine Rolle usw. enthält.

Antwort

1

Sie sind in der Nähe:

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

Der Grund dafür ist, dass $buscarUsuario ist eine Aussage, „Griff“, nicht ein tatsächliches Ergebnis aus der Datenbank festgelegt. Sie verwenden dieses "Handle", um die tatsächliche Ergebnismenge zu erhalten. Auf den Spuren der Logik mit der Dokumentation:

mysqli_stmt_get_result nimmt mysqli_stmt Argument und gibt eine mysqli_result:

mysqli_result mysqli_stmt_get_result (mysqli_stmt $stmt)

mysqli_fetch_assoc nimmt ein mysqli_result:

array mysqli_fetch_assoc (mysqli_result $result)

0

Bei Verwendung von mysqli_stmt_execute() die Funktion mysqli_stmt_fetch() muss verwendet werden, um die Daten abzurufen, bevor weitere Abfragen ausgeführt werden. Official Doc

while (mysqli_stmt_fetch($stmt)) { 

} 
Verwandte Themen