W3docs

Guida Completa alla Funzione mysqli_stmt_init in PHP

Scopri come usare mysqli_stmt_init in PHP per creare oggetti statement vuoti da trasformare in prepared statement con mysqli_stmt_prepare.

Quando si lavora con database MySQL in PHP, l'estensione mysqli fornisce funzioni per varie operazioni sui database. Una di queste è mysqli_stmt_init, che alloca e restituisce un oggetto statement vuoto che in seguito si trasforma in uno prepared statement tramite mysqli_stmt_prepare.

Questa guida spiega cosa fa mysqli_stmt_init, quando è effettivamente necessario e come si inserisce nel ciclo di vita completo dei prepared statement nei tuoi progetti PHP.

Cos'è la Funzione mysqli_stmt_init?

mysqli_stmt_init è una funzione PHP integrata che crea un oggetto mysqli_stmt vuoto associato a una connessione al database aperta. Non analizza né prepara alcun SQL da sola — questo è il compito di mysqli_stmt_prepare. Pensala come "dammi un handle di statement vuoto che posso preparare in seguito."

Sintassi

mysqli_stmt_init(mysqli $connection): mysqli_stmt|false
  • $connection — l'identificatore del collegamento restituito da mysqli_connect / mysqli_real_connect.
  • Valore restituito — un oggetto mysqli_stmt in caso di successo, o false in caso di errore (ad esempio, se la connessione non è valida).

Stile procedurale vs. orientato agli oggetti

Nel PHP moderno raramente si chiama mysqli_stmt_init direttamente. Il metodo orientato agli oggetti $mysqli->stmt_init() è equivalente, e $mysqli->prepare("...") esegue i passi di init e prepare in una singola chiamata:

// These two snippets produce the same prepared statement.

// Procedural, init then prepare:
$stmt = mysqli_stmt_init($connection);
mysqli_stmt_prepare($stmt, "SELECT id FROM users WHERE name = ?");

// Object-oriented shortcut (init + prepare in one call):
$stmt = $connection->prepare("SELECT id FROM users WHERE name = ?");

Quando Usarla?

La maggior parte del codice può ignorare mysqli_stmt_init e chiamare direttamente mysqli_prepare (o $mysqli->prepare()), che restituisce un oggetto statement già pronto. Si ricorre a mysqli_stmt_init quando si vuole un handle esplicito prima della preparazione — ad esempio, per impostare attributi dello statement con mysqli_stmt_attr_set (come il tipo di cursore) prima che l'SQL venga preparato, o semplicemente per rendere visibili i passi di init e prepare per maggiore chiarezza.

Come Usare la Funzione mysqli_stmt_init

Ecco i passaggi per utilizzare la funzione mysqli_stmt_init nei tuoi progetti PHP:

1. Connessione al Server MySQL

Prima di poter usare la funzione mysqli_stmt_init, devi stabilire una connessione al server MySQL tramite mysqli_connect. Ecco un esempio di codice:

<?php

$host = 'localhost';
$user = 'username';
$password = 'password';
$database = 'mydatabase';

$connection = mysqli_connect($host, $user, $password, $database);

if (!$connection) {
    die('Connection failed: ' . mysqli_connect_error());
}

2. Inizializzazione di un Oggetto Statement

Una volta stabilita la connessione al server MySQL, puoi usare la funzione mysqli_stmt_init per inizializzare un oggetto statement. Ecco un esempio:

$stmt = mysqli_stmt_init($connection);

if ($stmt === false) {
    die('Statement initialization failed: ' . mysqli_error($connection));
}

Questo codice inizializza un oggetto statement usando la funzione mysqli_stmt_init e include una gestione di base degli errori.

3. Ciclo di Vita Completo del Prepared Statement

Per sfruttare appieno lo statement inizializzato, dovresti seguire il ciclo di vita completo: preparare la query, associare i parametri, eseguire, recuperare i risultati e chiudere lo statement. Ecco un esempio completo:

// Prepare the SQL statement
if (!mysqli_stmt_prepare($stmt, "SELECT id, name, email FROM users WHERE name = ?")) {
    die('Prepare failed: ' . mysqli_stmt_error($stmt));
}

// Bind parameters
$name = "John Doe";
if (!mysqli_stmt_bind_param($stmt, "s", $name)) {
    die('Bind failed: ' . mysqli_stmt_error($stmt));
}

// Execute the statement
if (!mysqli_stmt_execute($stmt)) {
    die('Execute failed: ' . mysqli_stmt_error($stmt));
}

// Fetch results
// Note: mysqli_stmt_get_result requires the MySQL native driver (mysqlnd)
$result = mysqli_stmt_get_result($stmt);
while ($row = mysqli_fetch_assoc($result)) {
    print_r($row);
}

// Close the statement and connection
mysqli_stmt_close($stmt);
mysqli_close($connection);

Per ulteriori informazioni sul recupero delle righe, consulta mysqli_fetch_assoc, e per una visione d'insieme dei prepared statement leggi PHP MySQL Prepared Statements.

Errori Comuni

  • Dimenticare di verificare il valore restituito. mysqli_stmt_init restituisce false in caso di errore, quindi proteggi sempre con if ($stmt === false) prima di chiamare mysqli_stmt_prepare.
  • Confondere init con prepare. Un oggetto restituito da mysqli_stmt_init è vuoto — chiamare mysqli_stmt_execute su di esso prima di mysqli_stmt_prepare fallirà.
  • Perdita di risorse. Chiudi ogni statement con mysqli_stmt_close($stmt) quando hai finito; riutilizzare una connessione per molti statement senza chiuderli spreca risorse del server.
  • get_result non disponibile. mysqli_stmt_get_result richiede il driver mysqlnd. Se non è presente, associa le colonne di output con mysqli_stmt_bind_result e itera con mysqli_stmt_fetch.

Conclusione

La funzione mysqli_stmt_init è un passaggio fondamentale per lavorare con i prepared statement nei database MySQL tramite PHP. Alloca un oggetto mysqli_stmt vuoto che deve essere passato a mysqli_stmt_prepare prima che venga eseguito qualsiasi SQL. Chiudi sempre lo statement con mysqli_stmt_close($stmt) al termine per evitare perdite di risorse.

Nota: usa i prepared statement per qualsiasi query contenente valori forniti dall'utente per prevenire l'SQL injection — mantengono dati e sintassi SQL rigorosamente separati. Per query semplici e statiche senza variabili, mysqli_query è sufficiente e meno verboso.

Pratica

Pratica
Cosa fa mysqli_stmt_init() in PHP?
Cosa fa mysqli_stmt_init() in PHP?
Was this page helpful?