W3docs

Função PHP mysqli_refresh()

Aprenda como a função mysqli_refresh() do PHP libera caches do MySQL, tabelas, logs e privilégios. Flags de atualização, sintaxe OOP e procedural.

Introdução

MySQLi é a extensão PHP para comunicação com bancos de dados MySQL. A função mysqli_refresh() permite solicitar ao servidor que libere recursos internos — caches, definições de tabelas, logs ou as tabelas de concessão que armazenam os privilégios do usuário. É o equivalente programático de executar uma instrução SQL FLUSH.

Esta página explica o que mysqli_refresh() faz, as flags que aceita, como chamá-la tanto em código procedural quanto orientado a objetos, e a armadilha de privilégios que pega a maioria dos usuários de primeira viagem.

Sintaxe

mysqli_refresh() recebe a conexão aberta e uma máscara de bits com flags de atualização, e retorna true em caso de sucesso ou false em caso de falha.

mysqli_refresh(mysqli $mysql, int $flags): bool
ParâmetroDescrição
$mysqlUm link de conexão retornado por mysqli_connect() ou new mysqli(...).
$flagsUma ou mais constantes MYSQLI_REFRESH_* combinadas com o operador OR bit a bit (|).

No estilo orientado a objetos, a mesma chamada é escrita como $mysqli->refresh($flags).

Privilégio necessário. Liberar recursos é uma operação privilegiada. A conta MySQL com a qual você se conecta precisa do privilégio RELOAD (historicamente o privilégio SUPER). Um usuário de aplicação padrão receberá um erro de "acesso negado" e mysqli_refresh() retornará false.

Flags de atualização

O argumento $flags seleciona o que liberar. As constantes mais comuns são:

FlagO que libera
MYSQLI_REFRESH_GRANTRecarrega as tabelas de concessão (equivalente a FLUSH PRIVILEGES).
MYSQLI_REFRESH_LOGLibera os logs de erros, consultas e binários (rotação de logs).
MYSQLI_REFRESH_TABLESLibera todas as tabelas abertas e fecha seus arquivos (FLUSH TABLES).
MYSQLI_REFRESH_HOSTSLimpa o cache interno de hosts.
MYSQLI_REFRESH_STATUSRedefine as variáveis de status de sessão/servidor.
MYSQLI_REFRESH_THREADSLibera o cache de threads.
MYSQLI_REFRESH_REPLICARedefine a réplica (anteriormente MYSQLI_REFRESH_SLAVE).

Combine flags com | para realizar várias ações em uma única ida e volta:

mysqli_refresh($conn, MYSQLI_REFRESH_TABLES | MYSQLI_REFRESH_LOG);

Como usar mysqli_refresh()

Abra uma conexão, chame mysqli_refresh() com a flag desejada e verifique o valor booleano retornado. Veja um exemplo procedural completo:

<?php

// Create a connection to the MySQL server
$conn = mysqli_connect("localhost", "username", "password", "database");

// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

// Flush server tables and caches
// Requires SUPER or FLUSH privilege
if (mysqli_refresh($conn, MYSQLI_REFRESH_TABLES)) {
    echo "Tables flushed successfully.";
} else {
    echo "Refresh failed: " . mysqli_error($conn);
}

// To fetch updated data, re-execute the query
$result = mysqli_query($conn, "SELECT * FROM table");
if (!$result) {
    die("Query failed: " . mysqli_error($conn));
}

// Process the results
if ($result) {
    while ($row = mysqli_fetch_assoc($result)) {
        // Process each row of data
    }
    mysqli_free_result($result);
}

// Close the connection
mysqli_close($conn);
?>

A conexão é estabelecida com mysqli_connect(). mysqli_refresh() então libera as tabelas abertas, o resultado é verificado, e os dados são lidos novamente com mysqli_query() e mysqli_fetch_assoc(). Por fim, o link é liberado com mysqli_close().

Estilo orientado a objetos

Se você preferir a interface OOP, a conexão é um objeto mysqli e refresh() é um método nele:

<?php

$mysqli = new mysqli("localhost", "username", "password", "database");

if ($mysqli->connect_errno) {
    die("Connection failed: " . $mysqli->connect_error);
}

if ($mysqli->refresh(MYSQLI_REFRESH_TABLES | MYSQLI_REFRESH_LOG)) {
    echo "Tables and logs flushed successfully.";
} else {
    echo "Refresh failed: " . $mysqli->error;
}

$mysqli->close();
?>

Ambos os estilos se comportam de forma idêntica; a versão OOP simplesmente lê o error e connect_error da conexão como propriedades do objeto em vez de usar mysqli_error().

Casos de uso da função MySQLi Refresh

A função mysqli_refresh() é valiosa para uma variedade de cenários, incluindo:

1. Gerenciamento de cache de tabelas

A função mysqli_refresh() pode ser usada para liberar caches de tabelas. Isso é útil quando as estruturas das tabelas foram alteradas e você precisa que o servidor recarregue as definições.

2. Gerenciamento de logs

A função pode liberar logs gerais, lentos ou binários. Isso é útil para manutenção do banco de dados e para garantir que os arquivos de log sejam corretamente rotacionados.

3. Recarga de privilégios

Os desenvolvedores podem usá-la para recarregar as tabelas de concessão após fazer alterações nos privilégios do usuário, garantindo que as atualizações de permissões entrem em vigor imediatamente.

Vantagens da função MySQLi Refresh

A função mysqli_refresh() oferece várias vantagens para desenvolvedores PHP:

1. Gerenciamento eficiente de cache

A função permite que os desenvolvedores limpem os caches do servidor sob demanda. Isso é útil em aplicações que requerem atualizações imediatas nas definições de tabelas ou caches de consulta.

2. Manutenção aprimorada do banco de dados

A função garante que logs e caches sejam gerenciados adequadamente, o que pode levar a melhor desempenho do servidor e solução de problemas mais fácil.

3. Atualizações imediatas de privilégios

A função é valiosa no gerenciamento de permissões de usuários. Ao recarregar as tabelas de concessão, a aplicação pode garantir que todos os usuários trabalhem com os direitos de acesso mais atualizados.

Armadilhas comuns

  • Acesso negado. A surpresa mais frequente: uma conta de aplicação regular não possui o privilégio RELOAD/SUPER, então a chamada retorna false. Sempre verifique o valor retornado e leia mysqli_error().
  • Não é o "refresh" do HTTP. mysqli_refresh() não tem nada a ver com recarregar uma página web. Ela libera o estado MySQL no lado do servidor. Para buscar dados novamente no seu script, você deve executar a consulta novamente — liberar não retorna linhas.
  • Constantes renomeadas. MYSQLI_REFRESH_SLAVE/MYSQLI_REFRESH_MASTER foram renomeadas para MYSQLI_REFRESH_REPLICA/MYSQLI_REFRESH_SOURCE em versões mais recentes do MySQL/PHP; prefira os novos nomes em configurações modernas.
  • Prefira SQL quando possível. A maioria do código pode simplesmente executar FLUSH TABLES (ou FLUSH PRIVILEGES) através de mysqli_query(); mysqli_refresh() é um wrapper de conveniência em torno dos mesmos comandos de liberação.

Conclusão

A função mysqli_refresh() fornece uma maneira direta de enviar comandos FLUSH ao servidor MySQL, ajudando os desenvolvedores a gerenciar recursos e recarregar definições após alterações estruturais ou tarefas de manutenção. Com suporte a múltiplas flags de atualização e efeito imediato em caches, logs e privilégios, ela permanece uma ferramenta prática para administração de banco de dados em aplicações PHP.

Esperamos que este guia tenha esclarecido como usar a função mysqli_refresh() de forma eficaz. Seguindo os passos e as melhores práticas descritas aqui, os desenvolvedores podem manter o desempenho e a segurança ideais do banco de dados.

Prática

Prática
O que mysqli_refresh() faz no PHP?
O que mysqli_refresh() faz no PHP?
Was this page helpful?