W3docs

info

Scopri la funzione mysqli_info() in PHP: cosa restituisce, quali istruzioni producono output e come usarla in stile procedurale e orientato agli oggetti.

Questo articolo tratta la funzione mysqli_info() in PHP, che restituisce una stringa leggibile che descrive ciò che ha fatto l'ultima query eseguita. Imparerai cosa restituisce la funzione, quali istruzioni producono output, come chiamarla sia nello stile procedurale che in quello orientato agli oggetti di MySQLi, e come si differenzia da funzioni correlate come mysqli_affected_rows().

Cosa restituisce mysqli_info()

mysqli_info() è una funzione PHP integrata che restituisce una stringa di stato formattata per l'ultima query eseguita su una data connessione. La stringa è lo stesso testo che il server MySQL riporta per l'istruzione — è pensata per gli esseri umani, non per essere analizzata programmaticamente.

Produce una stringa solo per le istruzioni che modificano o caricano più righe. Per altre query (un semplice SELECT, un CREATE TABLE, ecc.) restituisce una stringa vuota o NULL. Le istruzioni che producono una stringa sono:

IstruzioneEsempio di stringa di output
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

Poiché il formato non è stabile tra i diversi tipi di istruzione o le versioni di MySQL, tratta la stringa come un valore di visualizzazione. Per leggere i singoli numeri in modo programmatico, usa le funzioni dedicate — vedi mysqli_affected_rows() e mysqli_warning_count().

Sintassi

mysqli_info() accetta il link restituito da mysqli_connect():

// Procedural style
string mysqli_info(mysqli $link)

// Object-oriented style
string $mysqli->info

Nell'API orientata agli oggetti, info è una proprietà, non un metodo — nota l'assenza delle parentesi.

Come usare mysqli_info()

Chiama mysqli_info() su una connessione MySQLi valida subito dopo aver eseguito una query con mysqli_query(). Esegui il controllo dello stato prima di inviare la query successiva, poiché ogni query sovrascrive lo stato precedente.

<?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);
?>

Per l'inserimento a tre righe di cui sopra, lo script stampa:

Records: 3  Duplicates: 0  Warnings: 0

Qui Records è il numero di righe elaborate dall'istruzione, Duplicates conta le righe che sono entrate in conflitto con una chiave univoca, e Warnings riporta i problemi non fatali sollevati durante l'esecuzione.

Stile orientato agli oggetti

La stessa logica usando l'API MySQLi orientata agli oggetti legge la proprietà 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()

Queste due funzioni possono essere facilmente confuse:

  • mysqli_info() restituisce una stringa formattata per la visualizzazione e funziona solo per i tipi di istruzione elencati sopra.
  • mysqli_affected_rows() restituisce un conteggio intero delle righe modificate da INSERT, UPDATE, DELETE o REPLACE — usala quando hai bisogno di un numero nel tuo codice.

Se hai bisogno del conteggio, non analizzare mai la stringa restituita da mysqli_info(); chiama direttamente mysqli_affected_rows().

Errori comuni

  • Un semplice SELECT non restituisce nulla. mysqli_info() è vuota per SELECT; per contare le righe restituite usa mysqli_num_rows() sul result set.
  • Lo stato viene azzerato alla query successiva. Leggi mysqli_info() immediatamente dopo la query che ti interessa.
  • Non analizzare la stringa. La sua formulazione cambia tra i tipi di istruzione e le versioni del server; usa le funzioni dedicate per conteggi e avvisi quando scrivi la logica applicativa.

Conclusione

mysqli_info() è un modo rapido per ottenere un riepilogo leggibile di ciò che ha fatto l'ultima query — quanti record sono stati elaborati, quanti erano duplicati e quanti avvisi si sono verificati. Usala per il logging e il debugging, e ricorri a mysqli_affected_rows() o mysqli_warning_count() quando il tuo codice ha bisogno dei valori numerici. Per ulteriori informazioni sull'esecuzione delle query, consulta la panoramica di PHP MySQLi.

Pratica

Pratica
Cosa restituisce la funzione PHP mysqli_info()?
Cosa restituisce la funzione PHP mysqli_info()?
Was this page helpful?