mysqli_stmt_prepare în PHP

Pregătește o interogare SQL cu semne ? pe un obiect creat cu mysqli_stmt_init.

Sintaxă
mysqli_stmt_prepare(mysqli_stmt $statement, string $query): bool

Ce face mysqli_stmt_prepare

Funcția trimite serverului SQL-ul și îl pregătește pentru execuție. Același obiect poate fi pregătit din nou cu altă interogare. În majoritatea cazurilor, mai simplu este mysqli_prepare, care creează și pregătește obiectul dintr-un singur apel.

Exemplele de pe această pagină folosesc baza de date magazin, cu tabelul produse (coloanele id INT AUTO_INCREMENT, nume VARCHAR(100) NOT NULL, pret INT și stoc INT) și patru rânduri: Laptop (3200 lei, 5 buc.), Mouse (80 lei, 40 buc.), Monitor (900 lei, 0 buc.) și Tastatură (150 lei, 12 buc.). Comenzile SQL sunt explicate în secțiunea MySQL. Rezultatele au fost scrise pentru MySQL 8, pentru că exemplele au nevoie de un server de baze de date.

Parametri

Parametru Descriere
$statement Obiectul creat cu mysqli_stmt_init.
$query Comanda SQL, cu ? în locul valorilor.

Ce returnează

true la succes. O eroare de sintaxă SQL aruncă mysqli_sql_exception (PHP 8.1+).

Exemple

Exemplul 1: Eroare de SQL găsită la pregătire

<?php
$conn = mysqli_connect("localhost", "ana", "parola_ta", "magazin");
$stmt = mysqli_stmt_init($conn);

try {
    mysqli_stmt_prepare($stmt, "SELECT nume FROM produse WHERE culoare = ?");
} catch (mysqli_sql_exception $e) {
    echo $e->getMessage();
}

Rezultat (cu un server MySQL și tabelul produse de mai sus)

Unknown column 'culoare' in 'where clause'

Greșeli frecvente

  • Pui mai multe comenzi SQL separate prin ;. O interogare pregătită acceptă o singură comandă.

Comenzi înrudite

  • mysqli_stmt_init: Creează un obiect gol de interogare pregătită, pe care îl pregătești apoi cu mysqli_stmt_prepare.
  • mysqli_prepare: Pregătește o interogare SQL cu semne ? în loc de valori. Este metoda sigură împotriva SQL injection.
  • mysqli_stmt_param_count: Returnează numărul de semne ? (parametri) din interogarea pregătită.