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

Problema com a classe ConnectionCreator

Boa noite

Quando utilizo $pdo = ConnectionCreator::createConnection() os arquivos que contem SQL não funcionam, me retornam o erro informando que a table students não existe, para testar eu utilizei $caminhoBanco = __DIR__ . 'banco.sqlite'; $pdo = new PDO('sqlite:' . $caminhoBanco); e os arquivos que utilizam SQL voltaram a funcionar normalmente

baixei os arquivos da aulas também para testar e a diferença é que utilizando a classe ConnectionCreator::createConnection(); não me retorna nenhum erro, mas me retorna um array vazio

ConnectionCreator.php
<?php

namespace Alura\Pdo\Infrastructure\Persistence;

use PDO;

class ConnectionCreator
{
    public static function createConnection(): PDO
    {
        $databasePath = __DIR__ . '/../../../banco.sqlite';
        return new PDO('sqlite:' . $databasePath);
    }
}

listar-aluno.php
<?php

use Alura\Pdo\Domain\Model\Student;
use Alura\Pdo\Infrastructure\Persistence\ConnectionCreator;

require_once 'vendor/autoload.php';

$pdo = ConnectionCreator::createConnection();

$stmt = $pdo->query("SELECT * FROM students;");
$studentDataList = $stmt->fetchAll(PDO::FETCH_ASSOC);

$studentList = [];

foreach ($studentDataList as $studentData) {
    $studentList[] = new Student(
        $studentData['id'],
        $studentData['name'],
        new \DateTimeImmutable($studentData['birth_date'])
    );
}

var_dump($studentList);

Fatal error: Uncaught Error: Call to a member function fetchAll() on bool

E quando utilizo este código me retorna o seguinte erro

<?php

namespace Alura\Pdo\Infrastructure\Persistence;

use PDO;

class ConnectionCreator
{
    public static function createConnection(): PDO
    {
        $databasePath = __DIR__ . '/../../../banco.sqlite';
        $connection = new PDO('sqlite:' . $databasePath);
        $connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        return $connection;
    }
}

listar-aluno.php
<?php

use Alura\Pdo\Domain\Model\Student;
use Alura\Pdo\Infrastructure\Persistence\ConnectionCreator;

require_once 'vendor/autoload.php';

$pdo = ConnectionCreator::createConnection();
print_r($pdo);

$stmt = $pdo->query("SELECT * FROM students;");
$studentDataList = $stmt->fetchAll(PDO::FETCH_ASSOC);

$studentList = [];

foreach ($studentDataList as $studentData) {
    $studentList[] = new Student(
        $studentData['id'],
        $studentData['name'],
        new \DateTimeImmutable($studentData['birth_date'])
    );
}

var_dump($studentList);

Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 1 no such table: students
3 respostas

Yuri, nessa aula aqui nós criamos essa tabela: https://cursos.alura.com.br/course/php-pdo-banco-de-dados/task/72925

Eu segui os passos desta aula, quando utilizo esse código para conexão $caminhoBanco = __DIR__ . 'banco.sqlite'; $pdo = new PDO('sqlite:' . $caminhoBanco); os arquivos inserir-aluno.php e listar-aluno.php funcionam normalmente, porem quando uso $pdo = ConnectionCreator::createConnection(); tanto o arquivo inserir-aluno.php quanto o listar-aluno.php me retornam este erro: Fatal error: Uncaught Error: Call to a member function fetchAll() on bool. Estou utilizando o mesmo código da aula, que deixei acima

solução!

Não sei o que houve, mas aparentemente os dados não ficaram salvos no sqlite, fiz uma quantidade de aulas em um dia, e no dia seguinte tive esses erros, refiz os passos de executar conexao.php, inserir-alunos.php, listar-alunos.php e funcionou normalmente e instalei tbm um pacote chamado sqlite3.