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

Bancos de Dados··· 383 visualizações· 3 min de leitura

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 projeto novo, o PDO é a escolha segura. Em ambos o servidor é localhost, e o nome da base e do usuário levam o prefixo da conta.

Um exemplo completo com PDO

1 Crie a base, o usuário e os privilégios no cPanel. Veja criar um usuário e os privilégios.
2 Crie um arquivo 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 conexão.';
}
3 Abra teste-bd.php no navegador. Deve ver Ligado e a data. Se vir Falhou a conexão, o motivo está no log de erros do PHP. Veja onde está o log de erros.
4 Apague o arquivo de teste. Já cumpriu a sua função.

A mesma conexão com mysqli, e uma consulta segura

Com mysqli a conexão faz-se com new mysqli('localhost', 'conta_utilizador', 'senha', '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 usuário à base no cPanel; e escrever a senha no código e publicá-la num repositório. Guarde os dados fora do código: veja senhas fora do código.

Onde pôr os dados de conexão

No exemplo, os valores estão no próprio arquivo, só para o teste. Numa aplicação de verdade, ponha-os num arquivo 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 senha não sai. Repare também no ERRMODE_EXCEPTION: faz com que um erro de SQL se torne uma exceção que se vê, em vez de um silêncio em que nada acontece. E abra um link por pedido, não um por consulta.

Acentos a sair mal? O conjunto de caracteres do link 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 exato, sem a senha, e vamos ver.

Abrir um pedido de suporte

VEJA TAMBÉM

Ligar à base a partir de Python e Node.js

Senhas fora do código PHP

Erro de conexão ao banco de dados: as causas por ordem

PRODUTO RECOMENDADO

Hospedagem de sites com cPanel

Domínio e SSL incluídos, cópias diárias e o painel que já conhece. desde R$ 36,30/mês (plano de 3 anos, com cupom)

Ver planos
Esta resposta foi útil? Sua resposta nos ajuda a melhorar este artigo.