Ligar ao MySQL a partir de PHP: mysqli e PDO, com um exemplo que funciona

Em PHP há duas maneiras de falar com a base: mysqli (só para MySQL e MariaDB) e PDO (serve também para PostgreSQL e outras). Para um projecto novo, o PDO é a escolha segura. Em ambos o servidor é localhost, e o nome da base e do utilizador levam o prefixo da conta.

Um exemplo completo com PDO

1 Crie a base, o utilizador e os privilégios no cPanel. Veja criar um utilizador e os privilégios.
2 Crie um ficheiro teste-bd.php na pasta do site, com este conteúdo (troque os três valores pelos seus):<?php
$dsn = 'mysql:host=localhost;dbname=conta_base;charset=utf8mb4';
try {
$pdo = new PDO($dsn, 'conta_utilizador', 'a-sua-palavra-passe', [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
$linha = $pdo->query('SELECT NOW() AS agora')->fetch(PDO::FETCH_ASSOC);
echo 'Ligado: ' . $linha['agora'];
} catch (PDOException $e) {
error_log($e->getMessage());
echo 'Falhou a ligação.';
}
3 Abra teste-bd.php no navegador. Deve ver Ligado e a data. Se vir Falhou a ligação, o motivo está no registo de erros do PHP. Veja onde está o registo de erros.
4 Apague o ficheiro de teste. Já cumpriu a sua função.

A mesma ligação com mysqli, e uma consulta segura

Com mysqli a ligação faz-se com new mysqli('localhost', 'conta_utilizador', 'palavra-passe', 'conta_base'), e logo a seguir $ligacao->set_charset('utf8mb4'). Em ambas as bibliotecas, nunca junte variáveis ao texto SQL: use consultas preparadas, em que o valor segue à parte.

Biblioteca Consulta preparada Notas
PDO $st = $pdo->prepare('SELECT * FROM clientes WHERE email = ?'); $st->execute([$email]); Serve para MySQL, MariaDB e PostgreSQL. Troca-se o DSN.
mysqli $st = $ligacao->prepare('SELECT * FROM clientes WHERE email = ?'); $st->bind_param('s', $email); $st->execute(); Só MySQL e MariaDB.
Três coisas que dão erro: usar o nome da base sem o prefixo (o MariaDB responde Access denied); esquecer de ligar o utilizador à base no cPanel; e escrever a palavra-passe no código e publicá-la num repositório. Guarde os dados fora do código: veja palavras-passe fora do código.

Onde pôr os dados de ligação

No exemplo, os valores estão no próprio ficheiro, só para o teste. Numa aplicação a sério, ponha-os num ficheiro de configuração fora de public_html (na pasta acima, que o servidor web não serve) e inclua-o com require. Assim, se um dia o PHP falhar e mostrar o código em vez de o executar, a palavra-passe não sai. Repare também no ERRMODE_EXCEPTION: faz com que um erro de SQL se torne uma excepção que se vê, em vez de um silêncio em que nada acontece. E abra uma ligação por pedido, não uma por consulta.

Acentos a sair mal? O conjunto de caracteres da ligação tem de ser utf8mb4, como no exemplo. Veja os pontos de interrogação no texto.

O exemplo corre e a sua aplicação continua sem ligar? Mostre-nos o erro exacto, sem a palavra-passe, e vamos ver.

Abrir um pedido de suporte

VEJA TAMBÉM

Ligar à base a partir de Python e Node.js

Palavras-passe fora do código PHP

Erro de ligação à base de dados: as causas por ordem

PRODUTO RECOMENDADO

Alojamento de sites com cPanel

Domínio e SSL incluídos, cópias diárias e o painel que já conhece. desde 5.940,00 Kz/mês (plano de 3 anos, com cupão)

Ver planos
  • 0 Utilizadores acharam útil
Esta resposta foi útil?