mysqli_connect în PHP

Deschide o conexiune la un server MySQL sau MariaDB și returnează obiectul conexiunii.

Sintaxă
mysqli_connect(?string $hostname = null, ?string $username = null, ?string $password = null, ?string $database = null, ?int $port = null, ?string $socket = null): mysqli|false

Ce face mysqli_connect

mysqli_connect este primul pas pentru orice lucru cu o bază de date MySQL: primește serverul, utilizatorul, parola și numele bazei de date și returnează un obiect mysqli. Acest obiect se dă apoi tuturor celorlalte funcții mysqli_*. Același lucru se poate scrie orientat pe obiecte: new mysqli(...).

Din PHP 8.1, o conexiune eșuată aruncă excepția mysqli_sql_exception (în versiunile vechi, funcția returna false și afișa un avertisment). Imediat după conectare, setează codarea utf8mb4 cu mysqli_set_charset, ca diacriticele să fie salvate corect.

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
$hostname Serverul: "localhost" (prin socket Unix) sau o adresă, de exemplu "127.0.0.1" (prin TCP).
$username Utilizatorul MySQL.
$password Parola utilizatorului.
$database Opțional. Baza de date folosită implicit.
$port Opțional. Portul, implicit 3306.
$socket Opțional. Calea către socket-ul Unix.

Ce returnează

Un obiect mysqli. Din PHP 8.1, la eroare aruncă mysqli_sql_exception.

Exemple

Exemplul 1: Conectare cu diacritice corecte

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

echo "Conectat: " . mysqli_get_host_info($conn) . "\n";
echo "Server MySQL " . mysqli_get_server_info($conn);

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

Conectat: Localhost via UNIX socket
Server MySQL 8.0.39

Exemplul 2: Tratarea unei conexiuni eșuate

Detaliile erorii merg în jurnal; vizitatorul vede doar un mesaj general.

<?php
try {
    $conn = mysqli_connect("localhost", "ana", "parola_gresita", "magazin");
} catch (mysqli_sql_exception $e) {
    error_log("MySQL: " . $e->getMessage());
    echo "Site-ul are o problemă temporară. Încearcă din nou mai târziu.\n";
    echo "(în jurnal: " . $e->getMessage() . ")";
}

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

Site-ul are o problemă temporară. Încearcă din nou mai târziu.
(în jurnal: Access denied for user 'ana'@'localhost' (using password: YES))

Exemplul 3: Varianta orientată pe obiecte

<?php
$conn = new mysqli("127.0.0.1", "ana", "parola_ta", "magazin", 3306);
$conn->set_charset("utf8mb4");

echo $conn->host_info;

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

127.0.0.1 via TCP/IP

Greșeli frecvente

  • Scrii parola bazei de date direct în fișierele publicate pe GitHub. Pune datele de conectare într-un fișier de configurare separat, care nu este urcat în depozit.
  • Uiți mysqli_set_charset($conn, "utf8mb4"). Diacriticele apar ca ? sau Ä� în pagină sau în baza de date.
  • Verifici if (!$conn) pe PHP 8.1+. Funcția nu mai returnează false, ci aruncă o excepție: folosește try/catch.

Comenzi înrudite

  • mysqli_query: Trimite o interogare SQL către baza de date. Pentru SELECT returnează un rezultat din care citești rândurile.
  • mysqli_close: Închide o conexiune MySQL deschisă cu mysqli_connect.
  • mysqli_error: Returnează mesajul de eroare al ultimei operații MySQL de pe conexiune, sau text gol dacă nu a fost eroare.
  • PDO: PDO este interfața PHP comună pentru baze de date: același cod funcționează cu MySQL, PostgreSQL sau SQLite.