Aqui está um exemplo de código em PHP que cria um backup do banco de dados MySQL sem usar comandos do sistema operacional (como exec()
) e permite que você baixe o arquivo de backup através de um link (<a href>
) e exclua o arquivo antigo quando desejar:
<?php
$servername = "localhost";
$username = "seu_usuario";
$password = "sua_senha";
$database = "seu_banco_de_dados";
// Conectar ao banco de dados
$conn = new mysqli($servername, $username, $password, $database);
// Verificar a conexão
if ($conn->connect_error) {
die("Falha na conexão: " . $conn->connect_error);
}
// Nome do arquivo de backup
$backupFile = 'backup_' . date('Ymd_His') . '.sql';
// Criar o arquivo de backup
$handle = fopen($backupFile, 'w');
// Obter a lista de tabelas do banco de dados
$tables = array();
$result = $conn->query("SHOW TABLES");
while ($row = $result->fetch_row()) {
$tables[] = $row[0];
}
// Percorrer as tabelas e escrever os dados no arquivo de backup
foreach ($tables as $table) {
$result = $conn->query("SELECT * FROM $table");
fwrite($handle, "-- Tabela: $table\n");
while ($row = $result->fetch_assoc()) {
$row = array_map('addslashes', $row);
$row = array_map('htmlspecialchars', $row);
$sql = "INSERT INTO $table (`" . implode("`, `", array_keys($row)) . "`) VALUES ('" . implode("', '", $row) . "');";
fwrite($handle, $sql . "\n");
}
fwrite($handle, "\n");
}
// Fechar o arquivo
fclose($handle);
// Download do arquivo de backup
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . basename($backupFile));
header('Content-Length: ' . filesize($backupFile));
readfile($backupFile);
// Excluir o arquivo de backup do servidor
unlink($backupFile);
// Encerrar a conexão com o banco de dados
$conn->close();
?>
Neste exemplo, utilizamos a função fopen()
para criar um arquivo de backup e a função fwrite()
para escrever os dados de cada tabela do banco de dados no arquivo. Em seguida, usamos os cabeçalhos HTTP para permitir o download do arquivo de backup quando o link for clicado. Por fim, utilizamos a função unlink()
para excluir o arquivo de backup do servidor.
Certifique-se de substituir 'seu_usuario'
, 'sua_senha'
e 'seu_banco_de_dados'
pelas suas próprias credenciais e nome do banco de dados.
Se o banco de dados MySQL estiver configurado corretamente com a codificação desejada (como UTF-8, Latin1, etc.), os dados serão retornados nessa codificação específica quando você os recuperar usando as funções do PHP.
Quando você se conecta ao banco de dados usando a função mysqli_connect()
ou new mysqli()
, você pode especificar a codificação que deseja usar. Por exemplo, você pode definir a codificação para UTF-8 da seguinte forma:
$conn = new mysqli($servername, $username, $password, $database);
$conn->set_charset("utf8");
Ao fazer isso, o MySQL retornará os dados no formato UTF-8, e o PHP cuidará da codificação correta dos caracteres ao processar esses dados.
É importante lembrar que a codificação não é aplicada automaticamente nos valores armazenados no banco de dados. Você precisa configurar corretamente a codificação ao criar as tabelas e ao inserir os dados no banco de dados para garantir que os caracteres sejam armazenados corretamente.
Certifique-se de configurar a codificação correta tanto na conexão com o banco de dados quanto nas configurações do próprio banco de dados para garantir que os dados sejam manipulados e exibidos corretamente em seu aplicativo.