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
| 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.
|
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
|
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 |