Solucionado (ver solução)
Solucionado
(ver solução)
9
respostas

Não consigo exibir os artigos no índex.php após pesquisa no banco

E ai galera tudo bem, eu empaquei nos primeiros videos. Fiz a conexão com meu banco de dados e esta tudo ok, porém quando vou fazer meu query ele não esta retornando nada. Vi que o problema esta na linha do mysql-> querry.

Arquivo connection.php

<?php
$db_host = 'localhost';
$db_user = 'blog_user';
$db_password = 'alura';
$db_db = 'blog';
$db_port = 8889;

$mysql = new mysqli(
  $db_host,
  $db_user,
  $db_password,
  $db_db
);

$mysql->set_charset('utf8');

if ($mysql->connect_error) {
  echo 'Errno: '.$mysql->connect_errno;
  echo '<br>';
  echo 'Error: '.$mysql->connect_error;
  exit();
}

echo 'Success: A proper connection to MySQL was made.';
echo '<br>';
echo 'Host information: '.$mysql->host_info;
echo '<br>';
echo 'Protocol version: '.$mysql->protocol_version;

$mysql->close();
?>

Arquivo Artigo.php

<?php

require_once 'connection.php';

class Artigo
{
    private mysqli $mysql;

    public function __construct(mysqli $mysql)
    {
        $this->mysql = $mysql;
    }

    public function exibirTodos(): array
    {
        $consulta = 'SELECT id, titulo, conteudo FROM artigos';
        $resultado = $this->mysql->query($consulta);
        $artigos = $resultado->fetch_all(MYSQLI_ASSOC);
        return $artigos;
    }
}
9 respostas

Oi Heitor, beleza?

Você tem dados adicionados no banco de dados? Qual erro informa?

Fala Diego tudo bem e com você? Tenho sim dados adicionado eles são os mesmo dados na aula. Acho que as únicas coisas que fiz a mais foi adicionar os métodos de erro no arquivo connection.php e declarar o tipo do atributo da variável mysqli em artigo, pois estou com a nova versão no php 7.4. Basicamente ele não mostra erro nenhum, a conexão com o banco está ok. O problema que vi é que depois da linha que contém $resultado o código não retoma mais nada para o browser. Realmente passei o dia batendo cabeça, mas não achei erro. Não sei se seja a diferença de serviços, na aula usam o XAMPPS e eu o MAMP. Porém creio que não

Então, faz anos que não mecho com a extensão mysqli do PHP mas se você conseguir subir seu projeto (e um copia do arquivo sql do banco) para o github ou algum outro lugar para que possa baixar eu posso tentar te ajudar a descobrir qual o erro.

Uma coisa que achei estranho nesses códigos postado por você é que no arquivo connection você fecha a conexão com o método close, caso esteja usando essa instância do mysqli talvez seja esse problema. Está funcionando assim no projeto realizado pelo instrutor?

Então Diego não é o código de conexão que o professor trabalhou, este que estou sendo e o exemplo que o MAMP disponibiliza, porém ja comentei o método close() e ficou na mesma vou disponibilizar o código de conexão usado pelo professor aqui:

<?php

$mysql = new mysqli('localhost', 'root', '', 'blog');
$mysql->set_charset('utf8');

if ($mysql == FALSE) {
    echo "Erro na conexão";
}

Lembrando que alterei os parâmetros conforme o meu banco, pois criei um usuário para o acesso do mesmo e estou usando o MAMP no lugar do XAMPP.

O código da classe Artigo:

<?php

class Artigo
{
    private $mysql;

    public function __construct(mysqli $mysql)
    {
        $this->mysql = $mysql;
    }

    public function exibirTodos(): array
    {

        $resultado = $this->mysql->query('SELECT id, titulo, conteudo FROM artigos');
        $artigos = $resultado->fetch_all(MYSQLI_ASSOC);

        return $artigos;
    }
}

bem disponibilizei o que fiz no git: https://github.com/heitorzunta/alura-webapp.git

Desde já muito obrigado pela ajuda.

Os arquivos do projeto não subiram para o git, dê uma olhada ai novamente. Estou no aguardo.

Pronto corrigido https://github.com/heitorzunta/alura-webapp.git :)

solução!

Então Heitor,

Aqui funcionou normalmente, única coisa que tinha de errado era que você estava passando para o método construtor do Artigo uma instância da classe mysqli com o nome mysqli, enquanto no seu arquivo de conexão essa variável está com o nome de mysql. Tem certeza que os dados de sua conexão está ok ai? Faça essa alteração em relação ao nome da variável passada para o método construtor do Artigo.

Estava dessa forma em seu projeto : $artigo = new Artigo($mysqli);

Modifiquei somente o nome da variável para ficar de acordo com seu arquivo de conexão: $artigo = new Artigo($mysql);

Diego, agora que vi comi barriga mesmo não tinha visto que a variável que entrou no construtor de Artigo estava como $mysqli. Cara muito obrigado pela ajuda! Valeu mesmo!

Acontece até nas melhores famílias, qualquer coisa estou à disposição.

Bons estudos.