Já tentei de tudo, também já li os posts antigos, mas não consegui solucionar esse FATAL ERROR. Fiz conforme foi especificado nas aulas e no Github. Peço ajuda aos colegas e colaboradores.
Fatal error: Uncaught mysqli_sql_exception: Access denied for user 'root'@'localhost' (using password: NO) in C:\xampp\htdocs\blog\config.php:3 Stack trace: #0 C:\xampp\htdocs\blog\config.php(3): mysqli->__construct('localhost', 'root', '', 'blog') #1 C:\xampp\htdocs\blog\index.php(3): require('C:\xampp\htdocs...') #2 {main} thrown in C:\xampp\htdocs\blog\config.php on line 3
Consigo acessar o banco de dados normalmente (localhost/phpmyadmin) .
Aula de referência: 3. Adicionando um artigo no banco - aulas 3 e 4
Segue o meu código:
// Pasta admin - adicionar-artigo.php
<?php
require '../config.php';
require '../codigo-fonte/Artigo.php';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$artigo = new Artigo($mysql);
$artigo->adicionar($_POST['titulo'], $_POST['conteudo']);
header('Location: /blog/admin/index.html');
die();
}
?>
<!DOCTYPE html>
<html lang="pt-br">
<head>
<link rel="stylesheet" type="text/css" href="../style.css">
<meta charset="UTF-8">
<title>Adicionar Artigo</title>
</head>
<body>
<div id="container">
<h1>Adicionar Artigo</h1>
<form action="adicionar-artigo.php" method="post">
<p>
<label for="">Digite o título do artigo</label>
<input class="campo-form" type="text" name="titulo" id="titulo" />
</p>
<p>
<label for="">Digite o conteúdo do artigo</label>
<textarea class="campo-form" type="text" name="conteudo" id="conteudo"></textarea>
</p>
<p>
<button class="botao">Criar Artigo</button>
</p>
</form>
</div>
</body>
</html>
//Pasta codigo-fonte(src) - Artigo.php
<?php
class Artigo
{
private $mysql;
public function __construct(mysqli $mysql)
{
$this->mysql = $mysql;
}
public function adicionar(string $titulo, string $conteudo): void
{
$insereArtigo = $this->mysql->prepare('INSERT INTO artigos (titulo, conteudo) VALUES(?,?);');
$insereArtigo->bind_param('ss', $titulo, $conteudo);
$insereArtigo->execute();
}
public function exibirTodos(): array
{
$resultado = $this->mysql->query('SELECT id, titulo, conteudo FROM artigos');
$artigos = $resultado->fetch_all(MYSQLI_ASSOC);
return $artigos;
}
public function encontrarPorId(string $id): array
{
$selecionaArtigo = $this->mysql->prepare('SELECT id, titulo, conteudo FROM artigos WHERE id = ?');
$selecionaArtigo->bind_param('s', $id);
$selecionaArtigo->execute();
$artigo = $selecionaArtigo->get_result()->fetch_assoc();
return $artigo;
}
}
//artigo.php
<?php
require 'config.php';
require 'codigo-fonte/Artigo.php';
$obj_artigo = new Artigo ($mysql);
$artigo = $obj_artigo->encontrarPorId($_GET['id']);
?>
<!DOCTYPE html>
<html lang="pt-br">
<head>
<title>Meu Blog</title>
<meta charset="UTF-8">
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="container">
<h1>
<?php echo $artigo['titulo']; ?>
</h1>
<p>
<?php echo $artigo['conteudo']; ?>
</p>
<div>
<a class="botao botao-block" href="index.php">Voltar</a>
</div>
</div>
</body>
//config.php
<?php
$mysql = new mysqli('localhost','root', '', 'blog');
$mysql->set_charset('utf8');
if ($mysql == FALSE) {
echo "ERRO NA CONEXÃO AO BD";
}
//index.php
<?php
require 'config.php';
include 'codigo-fonte/Artigo.php';
$artigo = new Artigo($mysql);
$artigos = $artigo->exibirTodos();
?>
<!DOCTYPE html>
<html lang="pt-br">
<head>
<title>Meu Blog</title>
<meta charset="UTF-8">
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="container">
<h1>Meu Blog</h1>
<?php foreach ($artigos as $artigo) : ?>
<h2>
<a href="artigo.php?id=<?php echo $artigo['id']; ?>">
<?php echo $artigo['titulo']; ?>
</a>
</h2>
<p>
<?php echo $artigo['conteudo']; ?>
</p>
<?php endforeach; ?>
</div>
</body>
</html>