Criando um Banco de Dados MySQL com PHP
Aprenda a criar um banco de dados MySQL usando PHP, desde a conexão ao servidor até a criação de tabelas, com exemplos práticos de MySQLi.
Um banco de dados é o contêiner nomeado que armazena suas tabelas, e cada tabela contém os dados da sua aplicação em linhas e colunas. Antes de poder armazenar usuários, pedidos ou posts de blog, esse contêiner precisa existir no servidor MySQL. Este capítulo percorre a sequência completa em PHP: conectar ao servidor, executar uma instrução CREATE DATABASE e, em seguida, adicionar uma tabela dentro dele.
Você já deve ter o PHP e um servidor MySQL (ou MariaDB) instalado e em execução. Se a etapa de conexão falhar, consulte PHP Connect to MySQL e PHP MySQLi para obter detalhes de configuração.
Duas formas de comunicar com o MySQL
O PHP oferece duas extensões modernas para MySQL: MySQLi e PDO. Ambas são seguras e suportadas; este capítulo usa MySQLi porque é específica para MySQL e tem uma leitura simples, mas o mesmo SQL CREATE DATABASE funciona através do PDO também. Use PDO quando puder precisar trocar de mecanismo de banco de dados mais tarde, e prefira prepared statements sempre que dados do usuário forem usados em uma consulta.
As antigas funções mysql_* foram removidas no PHP 7 — não as utilize.
Passo 1 — Conectar ao servidor MySQL
Para criar um banco de dados, você se conecta ao servidor, não a um banco de dados específico (ele ainda não existe). Você fornece o host, o nome de usuário e a senha, mas sem o nome do banco de dados:
<?php
$servername = "localhost";
$username = "root";
$password = "";
// Create connection (no database name — we're about to create one)
$conn = new mysqli($servername, $username, $password);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
?>new mysqli(...) retorna um objeto de conexão. Se algo der errado, $conn->connect_error contém a mensagem, e die() interrompe o script exibindo-a. O nome de usuário e a senha acima são apenas exemplos — substitua-os pelas suas credenciais reais.
Os três passos a seguir são apresentados como trechos separados para maior clareza. Em um projeto real, você manteria o código de conexão em um único arquivo e o incluiria com require ou include.
Passo 2 — Criar o banco de dados
Com a conexão ao servidor aberta, execute uma instrução CREATE DATABASE através de $conn->query(). Para uma instrução que não retorna linhas (como CREATE, INSERT ou UPDATE), query() retorna TRUE em caso de sucesso e FALSE em caso de falha:
<?php
// SQL to create a database named myDB
$sql = "CREATE DATABASE myDB";
if ($conn->query($sql) === TRUE) {
echo "Database created successfully";
} else {
echo "Error creating database: " . $conn->error;
}
$conn->close();
?>Dica: use CREATE DATABASE IF NOT EXISTS myDB para evitar um erro caso o banco de dados já exista — útil em scripts de configuração que podem ser executados mais de uma vez.
Passo 3 — Criar uma tabela dentro do banco de dados
Um banco de dados por si só está vazio. Os dados residem em tabelas, que você define com CREATE TABLE — um nome de tabela seguido de suas colunas e seus tipos de dados. Desta vez, você se conecta com o nome do banco de dados (o quarto argumento) para que a nova tabela seja criada no lugar certo:
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "myDB";
// Connect, this time selecting the myDB database
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// SQL to create a table
$sql = "CREATE TABLE MyGuests (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)";
if ($conn->query($sql) === TRUE) {
echo "Table MyGuests created successfully";
} else {
echo "Error creating table: " . $conn->error;
}
$conn->close();
?>O que as definições das colunas significam:
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY— um número inteiro único gerado automaticamente para cada linha.UNSIGNEDsignifica sem negativos;PRIMARY KEYo torna o identificador da linha.VARCHAR(30)— texto de comprimento variável com até 30 caracteres.NOT NULL— a coluna deve sempre ter um valor.reg_date TIMESTAMP— definido como a hora atual na inserção e atualizado a cada modificação.
Observação: a antiga sintaxe de largura de exibição INT(6) está obsoleta desde o MySQL 8.0.17 e nunca afetou o armazenamento ou o intervalo, portanto o simples INT é preferível.
Erros comuns e como corrigi-los
- "Access denied for user" — nome de usuário ou senha incorretos, ou o usuário não tem o privilégio
CREATE. Verifique suas credenciais e permissões. - "Can't create database 'myDB'; database exists" — ele já existe. Exclua-o primeiro ou use
CREATE DATABASE IF NOT EXISTS. $conn->errorestá vazio, mas a consulta falhou — certifique-se de comparar com=== TRUE; umCREATEbem-sucedido retorna o booleanotrue, não um conjunto de resultados.
Próximos passos
Assim que seu banco de dados e suas tabelas existirem, os próximos passos são inserir dados e lê-los de volta:
- Insert Data into MySQL — adicione linhas com
INSERT INTO. - Select Data from MySQL — leia linhas com
SELECT. - MySQL Prepared Statements — a forma segura de usar dados do usuário em consultas.
- Create a MySQL Table — uma análise mais aprofundada do
CREATE TABLE.
Conclusão
Criar um banco de dados MySQL em PHP resume-se a três etapas: abrir uma conexão com o servidor, executar CREATE DATABASE e, em seguida, conectar a esse banco de dados e executar CREATE TABLE. Verificar $conn->connect_error e o valor de retorno de query() em cada etapa transforma falhas silenciosas em mensagens claras — o hábito que torna toda a sua camada de dados confiável.