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