W3docs

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. UNSIGNED significa sem negativos; PRIMARY KEY o 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->error está vazio, mas a consulta falhou — certifique-se de comparar com === TRUE; um CREATE bem-sucedido retorna o booleano true, 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:

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.

Prática

Prática
Qual é a sintaxe correta para criar um banco de dados em PHP usando MySQLi?
Qual é a sintaxe correta para criar um banco de dados em PHP usando MySQLi?
Was this page helpful?