Different mysqli_fetch array output than the one running in phpmyadmin

Asked

Viewed 538 times

1

I have the following php code that queries the database and returns a vector with the data.

 public function executeSelect($query){

            $resultado_id = mysqli_query($this->objetoConexao, $query);

            if($resultado_id){

                //Passa para um vetor o resultado da query
                $dados_usuario = mysqli_fetch_array($resultado_id, MYSQLI_ASSOC);

                return $dados_usuario;
            }
            else{
                return null;
            }

        }

$query = "SELECT *
              FROM prova_dados INNER JOIN prova_fotos ON (prova_fotos.id_dados_prova = prova_dados.id)
                GROUP BY prova_fotos.id_dados_prova ";

    $select = $dao->executeSelect($query);

    echo var_dump($select['materia']);

But when I run this query in phpmyadmin in the "hand" it returns me two lines, with the data grouped as I want, but in the return of the mysqli_fetch_array it shows me only one line.

result of the same query in phpmyadmin

inserir a descrição da imagem aqui

echo var_dump from php

inserir a descrição da imagem aqui

  • 1

    Your query should even return only one line? if you don’t need a while and return an array.

  • It should return two lines, because in my bank has 2 prova_fotos.id_dados_prova diferentes

  • would not echo var_dump($dados_usuario[]); ?

  • Of a var_dump($select); and see the return structure of the result, you may have to put in a foreach to print the results

  • @Matheuslopesmarques If done with empty brackets of error

  • what error of? tries without the brackets

  • I managed to solve with the answer code from below, thank you.

Show 2 more comments

2 answers

0


Notice that you identify as $dados_usuario = mysqli_fetch_array($resultado_id, MYSQLI_ASSOC); conflicting with the mysqli_fetch_array with the specified parameter, which is MYSQL_ASSOC.

The correct would be this way below

mysqli_fetch_assoc($resultado_id, MYSQLI_ASSOC);

and also you do not set a variable to go through the data / records in array, note the answer

 public function executeSelect($query, $objetoConexao){

        $query = "SELECT * FROM prova_dados INNER JOIN prova_fotos ON (prova_dados.id = prova_fotos.id_dados_prova)
            GROUP BY prova_fotos.id_dados_prova ";

        $resultado_id = mysqli_query($this->objetoConexao, $query);

        $valores = array(); /* Você não tinha criado uma variável para definir array */

        if($resultado_id){

            //Passa para um vetor o resultado da query
            $row = mysqli_fetch_assoc($resultado_id, MYSQLI_ASSOC);

            $valores['Aqui coloque o name do input'] = $row['Aqui coloque o nome da tabela que deseja percorrer'];

        } else {

        return json_encode(array( 'error' => mysqli_error($objetoConexao) ));        
    }

        return json_encode($valores);

}

Or if it’s not what you want, try this way, with While traversing the fields and returning, but here they will be returned in table format because I have delimited that they will be brought within a tag <td>

$query = "SELECT * FROM prova_dados INNER JOIN prova_fotos ON (prova_dados.id = prova_fotos.id_dados_prova) GROUP BY prova_fotos.id_dados_prova";

$resultado_id = mysqli_query($this->objetoConexao, $query);       

$row = array(); /* Você não tinha criado uma variável para definir array */

while ($row = mysqli_fetch_assoc($resultado_id)){

   echo "<tr>";
      echo "<td>". $row['Nome da tabela que quer percorrer'] ."</td>";
      echo "<td>". $row['Nome da tabela que quer percorrer'] ."</td>";
   echo "</tr>";

}
  • I managed with second code, thank you very much, but I did not understand why it worked this way, the difference is in mysqli_fetch_assoc né?

  • It also makes a difference, after all you declared mysql_fetch_array and then inside the parameter you identified as MYSQL_ASSOC, conflict you understand? And also note the code above, I have defined a $Row variable as an array, and I run this array using while, in a way that it goes through all the fields you want, SINCE THESE FIELDS EXIST WITHIN SELECT TABLES, understand ?

0

What you missed in your case was a while.

Change your function to look like this:

public function executeSelect($query){

        $resultado_id = mysqli_query($this->objetoConexao, $query);

        if($resultado_id){

            //Passa para um vetor o resultado da query
            while ($dados = mysqli_fetch_array($resultado_id, MYSQLI_ASSOC)) {
  $response[] = $dados;

}

            return $response;
        }
        else{
            return null;
        }

    }

Browser other questions tagged

You are not signed in. Login or sign up in order to post.