Solucionado (ver solução)
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 :)

https://github.com/Kamem0110/semana9

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 :)