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ă.