Fácil PHP

Conexão e consulta simples com PDO

Enunciado

Crie um script PHP que se conecte a um banco SQLite em memória, crie uma tabela produtos com colunas id (inteiro, chave primária) e nome (texto), insira dois produtos e liste todos os produtos usando fetchAll com o modo padrão PDO::FETCH_ASSOC.

Requisitos

  • Usar new PDO('sqlite::memory:') para conectar.
  • Configurar PDO::ATTR_ERRMODE para PDO::ERRMODE_EXCEPTION.
  • Inserir pelo menos dois produtos com prepared statements.
  • Exibir os produtos no formato ID: nome.

Código inicial

<?php
// Seu código aqui

Saída esperada

1: Caneta
2: Caderno
Ver dica

Use $pdo->exec() para criar a tabela e $pdo->prepare() + execute() para inserir. Para listar, use $pdo->query('SELECT * FROM produtos')->fetchAll().

Mostrar solução
<?php
// Conexão com SQLite em memória
$pdo = new PDO('sqlite::memory:');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

// Cria tabela
$pdo->exec('CREATE TABLE produtos (id INTEGER PRIMARY KEY, nome TEXT)');

// Insere produtos com prepared statement
$stmt = $pdo->prepare('INSERT INTO produtos (nome) VALUES (:nome)');
$stmt->execute([':nome' => 'Caneta']);
$stmt->execute([':nome' => 'Caderno']);

// Consulta todos
$stmt = $pdo->query('SELECT id, nome FROM produtos');
$produtos = $stmt->fetchAll();

// Exibe
foreach ($produtos as $p) {
    echo $p['id'] . ': ' . $p['nome'] . "\n";
}

Passo a passo

  1. Criamos a conexão PDO com SQLite em memória usando new PDO('sqlite::memory:').
  2. Definimos PDO::ATTR_ERRMODE como PDO::ERRMODE_EXCEPTION para que erros gerem exceções.
  3. Também definimos o fetch mode padrão como PDO::FETCH_ASSOC para retornar arrays associativos.
  4. Executamos um CREATE TABLE com exec().
  5. Preparamos um INSERT com placeholder nomeado :nome e executamos duas vezes com valores diferentes.
  6. Fazemos um SELECT com query() e recuperamos todos os registros com fetchAll().
  7. Iteramos e imprimimos cada produto no formato ID: nome.

Por que funciona

O PDO abstrai a conexão e permite usar prepared statements que separam a estrutura SQL dos dados. O fetch mode padrão definido na conexão simplifica o código, pois não precisamos especificar PDO::FETCH_ASSOC a cada fetch.

Erros comuns

  • Esquecer de definir ATTR_ERRMODE: sem isso, erros podem passar silenciosamente. Corrija com $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);.
  • Usar fetchAll(PDO::FETCH_ASSOC) mas depois acessar como objeto: resultará em erro. Mantenha consistência.
  • Não usar prepared statements e concatenar strings: abre brecha para SQL injection.

Outra forma de resolver

Poderia usar foreach ($pdo->query('SELECT ...') as $p) para iterar diretamente, mas fetchAll é mais explícito para iniciantes.

Saída esperada

1: Caneta
2: Caderno