Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
11
respostas

Não estou conseguindo "Inserindo com exec"

Estava dando tudo certo, mas ao colocar os novos comandos da erro (não localiza o arquivo).

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

<?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, 'Pedro Giusti', new \DateTimeImmutable('1995-07-30'));
$sqlInsert = "INSERT INTO Students (name, birth_date) VALUES ('{$student->name()}', '{$student->birthDate()->format('Y-m-d')}');";

//echo $sqlInsert;

var_dump($pdo->exec($sqlInsert));
PS C:\Users\pedro_nqn6vyu\Documents\Semana_9\php-pdo-projeto-inicial> php inserir-aluno.php
PHP Fatal error:  Uncaught PDOException: SQLSTATE[HY000]: General error: 1 no such table: Students in C:\Users\pedro_nqn6vyu\Documents\Semana_9\php-pdo-projeto-inicial\inserir-aluno.php:14
Stack trace:
#0 C:\Users\pedro_nqn6vyu\Documents\Semana_9\php-pdo-projeto-inicial\inserir-aluno.php(14): PDO->exec('INSERT INTO Stu...')
#1 {main}
  thrown in C:\Users\pedro_nqn6vyu\Documents\Semana_9\php-pdo-projeto-inicial\inserir-aluno.php on line 14

Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 1 no such table: Students in C:\Users\pedro_nqn6vyu\Documents\Semana_9\php-pdo-projeto-inicial\inserir-aluno.php on line 14

PDOException: SQLSTATE[HY000]: General error: 1 no such table: Students in C:\Users\pedro_nqn6vyu\Documents\Semana_9\php-pdo-projeto-inicial\inserir-aluno.php on line 14

Call Stack:
    0.0004     394184   1. {main}() C:\Users\pedro_nqn6vyu\Documents\Semana_9\php-pdo-projeto-inicial\inserir-aluno.php:0
    0.0051     460776   2. PDO->exec($statement = 'INSERT INTO Students (name, birth_date) VALUES ('Pedro Giusti', '1995-07-30');') C:\Users\pedro_nqn6vyu\Documents\Semana_9\php-pdo-projeto-inicial\inserir-aluno.php:14
PS C:\Users\pedro_nqn6vyu\Documents\Semana_9\php-pdo-projeto-inicial> composer dump-autoload
Generating autoload files
Generated autoload files

PS C:\Users\pedro_nqn6vyu\Documents\Semana_9\php-pdo-projeto-inicial> composer install
Installing dependencies from lock file (including require-dev)
Verifying lock file contents can be installed on current platform.
Nothing to install, update or remove
Generating autoload files
11 respostas

Olá, Pedro! Tudo bem?

O erro diz que não foi encontrada a tabela Students não foi encontrada no seu banco. Você chegou rodar o comando de criação da tabela Students?

Que eu vejo sim, está na pasta src\Domain\Model

Pedro, o arquivo Students dentro da pasta src\Domain\Model, não é uma tabela no banco de dados, ela é uma classe.

No início da aula dessa aula:

https://cursos.alura.com.br/course/php-pdo-banco-de-dados/task/72925

o instrutor usa o código abaixo parar criar a tabela de students no banco de dados

<?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 de criar a tabela, você pode usar o código abaixo para inserir registros em seu banco:

<?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, 'Pedro Giusti', new \DateTimeImmutable('1995-07-30'));
$sqlInsert = "INSERT INTO Students (name, birth_date) VALUES ('{$student->name()}', '{$student->birthDate()->format('Y-m-d')}');";

//echo $sqlInsert;

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

Qualquer dúvida estou a disposição :)

Continua dando erro:

conexao.php

<?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);');
Conectei
Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 1 table students already exists in C:\Users\Usuario\Desktop\Semana9\php\conexao.php on line 8

PDOException: SQLSTATE[HY000]: General error: 1 table students already exists in C:\Users\Usuario\Desktop\Semana9\php\conexao.php on line 8

Call Stack:
    0.0001     393088   1. {main}() C:\Users\Usuario\Desktop\Semana9\php\conexao.php:0
    0.0007     393520   2. PDO->exec($statement = 'CREATE TABLE students (id INTEGER PRIMARY KEY, name TEXT, birth_date TEXT);') C:\Users\Usuario\Desktop\Semana9\php\conexao.php:8

PHP Fatal error:  Uncaught PDOException: SQLSTATE[HY000]: General error: 1 table students already exists in C:\Users\Usuario\Desktop\Semana9\php\conexao.php:8
Stack trace:
#0 C:\Users\Usuario\Desktop\Semana9\php\conexao.php(8): PDO->exec('CREATE TABLE st...')
#1 {main}
  thrown in C:\Users\Usuario\Desktop\Semana9\php\conexao.php on line 8

Process finished with exit code 255

inserir-aluno.php

<?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, 'Pedro Giusti', new \DateTimeImmutable('1995-07-30'));
$sqlInsert = "INSERT INTO Students (name, birth_date) VALUES ('{$student->name()}', '{$student->birthDate()->format('Y-m-d')}');";

//echo $sqlInsert;

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

Fatal error: Uncaught Error: Class "Alura\Pdo\Domain\Model\Student" not found in C:\Users\Usuario\Desktop\Semana9\php\inserir-aluno.php on line 9

Error: Class "Alura\Pdo\Domain\Model\Student" not found in C:\Users\Usuario\Desktop\Semana9\php\inserir-aluno.php on line 9

Call Stack:
    0.0002     395288   1. {main}() C:\Users\Usuario\Desktop\Semana9\php\inserir-aluno.php:0

PHP Fatal error:  Uncaught Error: Class "Alura\Pdo\Domain\Model\Student" not found in C:\Users\Usuario\Desktop\Semana9\php\inserir-aluno.php:9
Stack trace:
#0 {main}
  thrown in C:\Users\Usuario\Desktop\Semana9\php\inserir-aluno.php on line 9

Process finished with exit code 255

Agora o erro é outro, está dizendo que não foi possivel localizar a classe Student.

Verifica se está certinho as pastas.

Tenta rodar também o composer dump-autoload para regenerar o arquivo de autoload

A pasta do Student, continua no mesmo lugar

use Alura\Pdo\Domain\Model\Student;

![](Insira aqui a descrição dessa imagem para ajudar na acessibilidade )

Certo, só para fazer um teste, na sua IDE você abriu a pasta Semana9, e partir dela você possui a pasta php. Tenta abrir pela IDE diretamente a pasta php que está dentro da pasta Semana9.

E tente executar novamente, tente executar via terminal. Usando o comando php inserir-aluno.php

Testei:

PS C:\Users\Usuario\Desktop\Semana9\php> php inserir-aluno.php
PHP Fatal error:  Uncaught Error: Class "Alura\Pdo\Domain\Model\Student" not found in C:\Users\Usuario\Desktop\Semana9\php\inserir-aluno.php:9
Stack trace:
#0 {main}
  thrown in C:\Users\Usuario\Desktop\Semana9\php\inserir-aluno.php on line 9

Fatal error: Uncaught Error: Class "Alura\Pdo\Domain\Model\Student" not found in C:\Users\Usuario\Desktop\Semana9\php\inserir-aluno.php on line 9

Error: Class "Alura\Pdo\Domain\Model\Student" not found in C:\Users\Usuario\Desktop\Semana9\php\inserir-aluno.php on line 9

Call Stack:
    0.0002     394936   1. {main}() C:\Users\Usuario\Desktop\Semana9\php\inserir-aluno.php:0

Oi, Pedro. Você poderia me enviar seu código seja pelo Drive ou pelo Github para que eu possa fazer uma analise mais profunda?

Desde já agradeço e fico no aguardo :)

solução!

Oii, Pedro, o erro está no autoload do composer.json, você precisa deixar da seguinte maneira:

    "autoload": {
        "psr-4": {
            "Alura\\Pdo\\": "src/"
        }
    }

Pois na classe Student o namespace está assim:

namespace Alura\Pdo\Domain\Model;

Depois de alterar o arquivo composer.json rode o comando composer dump-autoload.

Espero ter ajudado e bons estudos :)