info
Aprenda sobre a função mysqli_info() do PHP, que retorna informações sobre a consulta executada mais recentemente, com exemplos práticos.
Este artigo aborda a função mysqli_info() do PHP, que retorna uma string legível descrevendo o que a consulta executada mais recentemente fez. Você aprenderá o que a função retorna, quais instruções produzem saída, como chamá-la nos estilos procedural e orientado a objetos do MySQLi, e como ela difere de funções relacionadas como mysqli_affected_rows().
O que mysqli_info() retorna
mysqli_info() é uma função built-in do PHP que retorna uma string de status formatada para a última consulta executada em uma determinada conexão. A string é o mesmo texto que o servidor MySQL reporta para a instrução — ela é destinada para humanos, não para análise automática.
Ela só produz uma string para instruções que modificam ou carregam múltiplas linhas. Para outras consultas (um SELECT simples, um CREATE TABLE, etc.) ela retorna uma string vazia ou NULL. As instruções que produzem uma string são:
| Instrução | Exemplo de string de saída |
|---|---|
INSERT INTO ... SELECT ... | Records: 3 Duplicates: 0 Warnings: 0 |
INSERT INTO ... VALUES (...),(...) | Records: 2 Duplicates: 0 Warnings: 0 |
LOAD DATA INFILE ... | Records: 1 Deleted: 0 Skipped: 0 Warnings: 0 |
ALTER TABLE ... | Records: 3 Duplicates: 0 Warnings: 0 |
UPDATE ... | Rows matched: 40 Changed: 40 Warnings: 0 |
Como o formato não é estável entre tipos de instrução ou versões do MySQL, trate a string como um valor de exibição. Para ler números individuais programaticamente, use as funções dedicadas — veja mysqli_affected_rows() e mysqli_warning_count().
Sintaxe
mysqli_info() recebe o link retornado por mysqli_connect():
// Procedural style
string mysqli_info(mysqli $link)
// Object-oriented style
string $mysqli->infoNa API orientada a objetos, info é uma propriedade, não um método — observe que não há parênteses.
Como usar mysqli_info()
Chame mysqli_info() em uma conexão MySQLi válida logo após executar uma consulta com mysqli_query(). Execute a verificação de status antes de emitir a próxima consulta, pois cada consulta sobrescreve o status anterior.
<?php
$mysqli = mysqli_connect("localhost", "username", "password", "database");
if (!$mysqli) {
die("Connection failed: " . mysqli_connect_error());
}
// A multi-row INSERT produces a status string
$sql = "INSERT INTO users (name) VALUES ('Ann'), ('Bob'), ('Cara')";
if (mysqli_query($mysqli, $sql)) {
echo mysqli_info($mysqli);
} else {
echo "Query failed: " . mysqli_error($mysqli);
}
mysqli_close($mysqli);
?>Para o insert de três linhas acima, o script imprime:
Records: 3 Duplicates: 0 Warnings: 0Aqui Records é o número de linhas que a instrução processou, Duplicates conta as linhas que colidiram com uma chave única, e Warnings reporta problemas não fatais ocorridos durante a execução.
Estilo orientado a objetos
A mesma lógica usando a API MySQLi orientada a objetos lê a propriedade info:
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
if ($mysqli->connect_errno) {
die("Connection failed: " . $mysqli->connect_error);
}
$mysqli->query("INSERT INTO users (name) VALUES ('Ann'), ('Bob'), ('Cara')");
echo $mysqli->info; // Records: 3 Duplicates: 0 Warnings: 0
$mysqli->close();
?>mysqli_info() vs mysqli_affected_rows()
É fácil confundi-las:
mysqli_info()retorna uma string formatada para exibição e funciona apenas para os tipos de instrução listados acima.- mysqli_affected_rows() retorna uma contagem inteira de linhas alteradas por
INSERT,UPDATE,DELETEouREPLACE— use esta quando precisar de um número no seu código.
Se precisar da contagem, nunca analise a string de mysqli_info(); chame mysqli_affected_rows() diretamente.
Problemas comuns
- Um
SELECTsimples não retorna nada.mysqli_info()está vazia paraSELECT; para contar as linhas retornadas usemysqli_num_rows()no conjunto de resultados. - O status é redefinido na próxima consulta. Leia
mysqli_info()imediatamente após a consulta que você deseja verificar. - Não analise a string. Seu texto muda entre tipos de instrução e versões do servidor; use as funções dedicadas de contagem/aviso para lógica.
Conclusão
mysqli_info() é uma maneira rápida de obter um resumo legível do que a última consulta fez — quantos registros foram processados, quantos eram duplicatas e quantos avisos ocorreram. Use-a para logging e depuração, e recorra a mysqli_affected_rows() ou mysqli_warning_count() quando seu código precisar dos números em si. Para mais informações sobre execução de consultas, veja a visão geral do PHP MySQLi.