Ce face mysqli_error
mysqli_error dă textul erorii, iar mysqli_errno codul numeric (de exemplu 1146 pentru tabel inexistent, 1062 pentru valoare duplicată). Pentru erorile de conectare există mysqli_connect_error(), fără parametru.
Din PHP 8.1, mysqli aruncă implicit excepții mysqli_sql_exception, care conțin același mesaj (getMessage()) și același cod (getCode()). mysqli_error este folosit mai ales cu modul vechi, activat prin mysqli_report(MYSQLI_REPORT_OFF), în care funcțiile returnează false la eroare.
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 |
|---|---|
$mysql |
Conexiunea. |
Ce returnează
Mesajul de eroare sau "" dacă ultima operație a reușit.
Exemple
Exemplul 1: Modul implicit din PHP 8.1: excepții
<?php
$conn = mysqli_connect("localhost", "ana", "parola_ta", "magazin");
try {
mysqli_query($conn, "SELECT * FROM produs");
} catch (mysqli_sql_exception $e) {
echo "Cod " . $e->getCode() . ": " . $e->getMessage();
}
Rezultat (cu un server MySQL și tabelul produse de mai sus)
Cod 1146: Table 'magazin.produs' doesn't exist
Exemplul 2: Modul vechi, cu mysqli_error
<?php
mysqli_report(MYSQLI_REPORT_OFF);
$conn = mysqli_connect("localhost", "ana", "parola_ta", "magazin");
if (!mysqli_query($conn, "SELECT * FORM produse")) {
echo "Eroare " . mysqli_errno($conn) . ":\n" . mysqli_error($conn) . "\n";
}
mysqli_query($conn, "SELECT 1");
var_dump(mysqli_error($conn));
Rezultat (cu un server MySQL și tabelul produse de mai sus)
Eroare 1064:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FORM produse' at line 1
string(0) ""
Exemplul 3: Valoare duplicată
Presupunem că tabelul utilizatori are un index UNIQUE pe coloana email.
<?php
$conn = mysqli_connect("localhost", "ana", "parola_ta", "magazin");
try {
mysqli_execute_query($conn, "INSERT INTO utilizatori (email) VALUES (?)", ["ana@exemplu.ro"]);
} catch (mysqli_sql_exception $e) {
if ($e->getCode() === 1062) {
echo "Adresa de email este deja folosită.";
} else {
throw $e;
}
}
Rezultat (cu un server MySQL și emailul deja salvat)
Adresa de email este deja folosită.
Greșeli frecvente
- Afișezi
mysqli_error()vizitatorilor. Mesajul arată numele tabelelor și o parte din interogare. Scrie-l în jurnal cuerror_log. - Verifici
if (!$rezultat)șimysqli_errorpe PHP 8.1+ fărămysqli_report(MYSQLI_REPORT_OFF). Codul nu ajunge acolo: excepția oprește scriptul înainte.
Comenzi înrudite
mysqli_connect: Deschide o conexiune la un server MySQL sau MariaDB și returnează obiectul conexiunii.mysqli_query: Trimite o interogare SQL către baza de date. Pentru SELECT returnează un rezultat din care citești rândurile.try / catch / finally / throw: Prinde erorile (excepțiile) apărute într-un bloc de cod, ca scriptul să nu se oprească brusc.error_log: Scrie un mesaj în jurnalul de erori al serverului sau într-un fișier ales de tine.