4
respostas

Utilizando banco Postgres

Boa Tarde, Estou utilizando o banco postgres, já fiz a criação da tabela e dos campos. Essa parte da aula mostra o arquivo php, porém utilizando o SQLITE, como coloco em prática essa parte da aula utilizando o postgres? Insiro os dados a mão na tabela?

<?php

$dbPath = DIR . '/banco.sqlite'; $pdo = new PDO("sqlite:$dbPath");

$sql = 'INSERT INTO videos (url, title) VALUES (?, ?)'; $statement = $pdo->prepare($sql); $statement->bindValue(1, ); $statement->bindValue(2, );

Dede já agradeço

4 respostas

Boa tarde, tudo bem? Primeiramente, habilite a extensão do Postgres dentro do php.ini

extension=php_pdo_pgsql.dll

Abaixo vai um exemplo de conexão:

$host= 'localhost'; // Endereço do banco
$db = ''; // Nome do banco
$user = ''; // Usuário
$password = ''; // Senha
$dsn = "pgsql:host=$host;port=5432;dbname=$db;"; // String de conexão
// Executa a conexão
$pdo = new PDO($dsn, $user, $password, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);

Olá, Nathy. Reparei que você não fez o curso de PDO que é um dos pré-requisitos para esse curso. Lá a gente explica esses detalhes de conexão com diferentes bancos de dados. :-D

Mas, como o Erick respondeu, basta descomentar as linhas extension=pdo_pgsql e extension_dir=ext no seu arquivo php.ini (caso sua instalação do PHP seja no Windows). Isso vai habilitar o driver para se conectar ao postgres.

Bom dia Erick e Vínicius

Obrigada pelo suporte, porém esbarrei em outra dificuldade, eu utilizo o php 8.1 e estou me deparando com erro na questão do parâmetro "Cannot use positional argument after named argument".

PDO::ERRMODE_EXCEPTION]); $sql = 'INSERT INTO videos (url, title) VALUES (?, ?)'; $statement = $pdo->prepare($sql); $statement->bindValue(param:1, $_POST['url']); ----ERRO--- $statement->bindValue(param:1, $_POST['titulo']); ----ERRO--- $statement->execute(); ?>

Olá, Nathy. O problema não é relacionado com a versão. Sua sintaxe está incorreta. Antes do PHP 8.1 seu erro só seria diferente, mas continuaria dando erro. O erro está aqui:

bindValue(param:1, ...)

Esse param: não era para estar ali. Eu não escrevi isso no código durante o curso. O que você talvez tenha visto foi um auxílio visual da IDE. Ela mostra o nome do parâmetro quando passamos algum valor que não seja uma variável, mas isso não faz parte do código.

Em versões anteriores à 8.0 do PHP essa sintaxe que você usou é inválida e nem seria reconhecida pela linguagem. Mas nas versões mais recentes (como é o seu caso e o caso da versão usada no curso), você usou a funcionalidade de forma incorreta.

Resumindo: remova o param: do código e dá uma olhada nesse vídeo para entender: https://www.youtube.com/watch?v=epla4NyobjU

Reitero aqui que há cursos que são pré-requisitos para esse e você aparentemente não os assistiu, então eu recomendo que você assista todos os pré-requisitos antes para aproveitar melhor esse curso. :-D