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

Retorno Bool False no comando Exec

Arquivo da conexão e criação da tabela:

<?php

$databasePath = __DIR__ . '/banco2.sqlite';
$con = new PDO('sqlite:' . $databasePath);

echo 'Conectado';

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

Arquivo inserir-aluno:

<?php

use Alura\Pdo\Domain\Model\Student;

require 'vendor/autoload.php';

$databasePath = __DIR__ . '/banco2.sqlite';
$con = new PDO('sqlite:' . $databasePath);
$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$student = new Student(null, 'Lucas Souza', new \DateTimeImmutable('1998-09-22'));

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

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

Já vi as outras dúvidas parecidas que foram solucionadas. Consigo ver no PHPStorm que a tabela foi criada no banco de dados sqlite, então o problema não é a criação da tabela.

Daí apliquei a sugestão do professor e inseri o código após a conexão:

$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

Com esse código, estou recebendo o seguinte erro na linha do $con->exec($sqlInsert) :

PHP Fatal error:  Uncaught PDOException: SQLSTATE[HY000]: General error: 8 attempt to write a readonly database in C:\Users\Tonantins\Documents\curso-php\php-pdo-projeto-inicial\inserir-aluno.php:16
2 respostas

Lucas, parece um problema de restrição de escrita no banco2.sqlite do sistema operacional

solução!

Então Luís, enquanto eu ia responder aqui que estava procurando como permitir inserção de dados, resolvi testar de novo. Descobri que o antivirus estava bloqueando o INSERT na tabela. A diferença é que agora o antivirus perguntou se eu atorizava o arquivo inserir-alunos.php modificar a tabela.