3
respostas

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

Olá,

Está dando o erro no arquivo lista-alunos.php

Fatal error: Uncaught Error: Call to a member function fetchAll() on bool in C:\xampp\htdocs\php-pdo-projeto-inicial\lista-alunos.php:13 Stack trace: #0 {main} thrown in C:\xampp\htdocs\php-pdo-projeto-inicial\lista-alunos.php on line 13

O código do arquivo está assim:

<?php


require_once 'vendor/autoload.php';

$databasePath = __DIR__ . '\banco.sqlite';
$pdo = new PDO('sqlite:' . $databasePath);


$statement = $pdo->query('SELECT * FROM students');


$studentList = $statement->fetchAll();

echo $studentList[0]['nome'];

E o meu insert da seguinte maneira:

<?php

use Alura\Pdo\Domain\Model\Student;

require_once 'vendor/autoload.php';

$databasePath = __DIR__ . '\banco.sqlite';
$pdo = new PDO('sqlite:' . $databasePath);


$student = new Student(
    null,
    'Vinicius Dias',
    new \DateTimeImmutable('1997-10-15')
);

$sqlInsert = "INSERT INTO students (name, birth_date) VALUES ('{$student->name()}, {$student->birthDate()->format('Y-m-d')}')";


var_dump($pdo->exec($sqlInsert));

Não sei o que pode estar errado. Estou usando o VSCode, e executo em um servidor apache com os resultados aparecendo no navegador mesmo.

Agradeço desde já.

3 respostas

Lucas, provavelmente o arquivo do banco de dados não foi criado corretamente com a tabela students.

Sugiro não utilizar um servidor web agora para focar no PDO.

Boa tarde, Vinicius. Eu criei o banco de dados em um arquivo banco.sqlite como instruído. Depois escrevi a linha do exec, da query para criar a tabela:

<?php

$databasePath = __DIR__ . '/banco.sqlite';
$pdo = new PDO('sqlite:'.$databasePath);

echo "Conectei";

$pdo->exec('CREATE TABLE students (id INTEGER PRIMARY KEY, name TEXT, birth_date TEXT);');

Depois no arquivo de inserir começou a retornar bool(false).

Então não estou entendendo o que está acontecendo. Não estou mais utilizando o VSCode e migrei para o PHPStorm.

Fala, Lucas. Já que você usa o PHPStorm, pode conferir por ele mesmo se está tudo certo com o banco.

Pelo código que você compartilhou, parece estar tudo certo.