# PHP u databases: PDO u mysqli

> PHP u databases spjegati: PDO u mysqli imqabbla, prepared statements, trattament tal-iżbalji minn PHP 8 u aċċessi siguri għall-użu ta' kuljum.

Sors: https://phpsos.de/mt/php/php-und-datenbanken/  
Stat: 25/10/2026  
Fornitur: PHP SOS, Għajnuna ta' emerġenza għal PHP u sigurtà tas-server. Għajnuna immedjata fuq WhatsApp: https://wa.me/491736494914?text=Bongu%20PHP%20SOS%2C%20g%C4%A7andna%20b%C5%BConn%20g%C4%A7ajnuna%20bis-server%20tal-PHP%20tag%C4%A7na.%20Kumpanija%3A%20%E2%80%A6%20Websajt%3A%20%E2%80%A6

**Fil-qosor:** PHP taċċessa databases permezz ta' żewġ interfaces mifruxa: PDO (PHP Data Objects) jaħdem ma' ħafna sistemi ta' databases permezz ta' interface uniformi, mysqli huwa mfassal għal MySQL u MariaDB. Ma' tnejn minnhom, il-prepared statements, jiġifieri mistoqsijiet bi placeholders, jipproteġu b'mod affidabbli minn SQL injection. Minn PHP 8.0 (PDO) rispettivament 8.1 (mysqli) it-tnejn jirrapportaw l-iżbalji bħala exception b'mod predefinit.

## Kif PHP titkellem mad-databases

Kważi kull applikazzjoni PHP taħżen il-kontenut tagħha f'database: paġni, ordnijiet, kontijiet tal-utenti, settings. L-iskrip PHP jistabbilixxi għal dan konnessjoni, jibgħat mistoqsija fil-lingwa SQL u jipproċessa r-riżultat. L-aċċessi normalment jinsabu f'fajl tal-konfigurazzjoni fuq l-istess server.

Għall-maniġment dan huwa importanti, għax id-database normalment fiha d-dejta l-aktar prezzjuża tal-kumpanija. Min jista' jesegwixxi kodiċi fuq is-server tal-web, bħala regola jista' jaqra wkoll il-fajl tal-konfigurazzjoni u b'dawn l-aċċessi jaċċessa d-database.

## PDO u mysqli imqabbla

| Karatteristika | PDO | mysqli |
|---|---|---|
| Databases | ħafna, permezz ta' drivers bħal `PDO_MYSQL`, `PDO_PGSQL`, `PDO_SQLITE`, `PDO_SQLSRV`, `PDO_OCI` | MySQL u MariaDB |
| Placeholders | msemmija (`:name`) u posizzjonali (`?`) | posizzjonali (`?`) |
| Stil | orjentat lejn l-oġġetti | orjentat lejn l-oġġetti u proċedurali |
| Żbalji bħala exception | standard minn PHP 8.0.0 | standard minn PHP 8.1.0 |
| Forma qasira għal mistoqsijiet bi parametri | `prepare()` u `execute()` b'array | `execute_query()` minn PHP 8.2.0 |

Fil-prattika spiss jiddeċiedi l-framework jew iċ-CMS. Ħafna jġibu saff proprju tad-database li ġewwa juża PDO jew mysqli. Min jieħu applikazzjoni jista' b'tiftix sempliċi fil-kodiċi sors jistabbilixxi liema interface qed tintuża u fejn jinħolqu l-mistoqsijiet:

```bash
# Fejn l-applikazzjoni tistabbilixxi konnessjonijiet, fejn jinħolqu l-mistoqsijiet?
grep -rn --include='*.php' -E 'new PDO|new mysqli|mysqli_connect|->query\(' /var/www/app/src | head -50
```

Postijiet misjuba b'`->query(` mhumiex awtomatikament mhux sikuri. Imma jixirqilhom ħarsa oħra, għax hemmhekk il-valuri jistgħu jidħlu direttament fit-test SQL, minflok ma jiġu mgħoddija permezz ta' placeholders. Proġetti eqdem speċjalment jaħلطu ż-żewġ stili, u l-verifika tħallas qabel kull aġġornament ikbar.

## Prepared statements: l-aktar mudell importanti

F'prepared statement il-mistoqsija tintbagħat lid-database bi placeholders u l-valuri jiġu mgħoddija separatament. Skont il-manwal ta' PHP, dan jipproteġi minn SQL injection jekk l-inputs kollha tal-utent jgħaddu minn placeholders.

```php
<?php
declare(strict_types=1);

$pdo = new PDO(
    'mysql:host=localhost;dbname=shop;charset=utf8mb4',
    $dbUser,
    $dbPass,
    [PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC]
);

$stmt = $pdo->prepare('SELECT id, name FROM kunden WHERE plz = :plz AND aktiv = :aktiv');
$stmt->execute(['plz' => $plz, 'aktiv' => 1]);

foreach ($stmt as $zeile) {
    echo htmlspecialchars($zeile['name'], ENT_QUOTES, 'UTF-8'), "\n";
}
```

L-istess ħaġa b'mysqli fil-forma qasira li teżisti minn PHP 8.2:

```php
<?php
$db = new mysqli('localhost', $dbUser, $dbPass, 'shop');
$ergebnis = $db->execute_query('SELECT id, name FROM kunden WHERE plz = ?', [$plz]);

foreach ($ergebnis as $zeile) {
    echo htmlspecialchars($zeile['name'], ENT_QUOTES, 'UTF-8'), "\n";
}
```

L-iżviluppaturi għandhom jaf żewġ limiti. Il-placeholders m'għandhomx jitpoġġew bejn l-ilsiera; fi tfittxijiet `LIKE` il-karattri ta' placeholder `%` jappartjenu fil-valur mgħoddi. U l-placeholders jissostitwixxu biss valuri, mhux ismijiet ta' tabelli jew kolonni. Kif dawn il-każijiet speċjali jissolvew b'mod sigur turi l-gwida [Kif tipprevjenu SQL injection f'PHP](https://phpsos.de/mt/ratgeber/sql-injection-php/).

## Trattament tal-iżbalji: exceptions minflok żbalji silenzjużi

Qabel, iż-żewġ interfaces kienu jaħdmu b'mod silenzjuż b'mod predefinit: mistoqsija falluta kienet tirritorna `false`, u min ma kkontrollax dan kompla jaħdem b'dejta vojta. Dan inbidel:

- **PDO:** Minn PHP 8.0.0 `PDO::ERRMODE_EXCEPTION` huwa l-istandard. L-iżbalji jitfgħu `PDOException`.
- **mysqli:** Minn PHP 8.1.0 ir-rapportar huwa ssettjat fuq `MYSQLI_REPORT_ERROR` u `MYSQLI_REPORT_STRICT`. L-iżbalji jitfgħu `mysqli_sql_exception`; qabel ir-rapportar kien mitfi.

Għas-sigurtà dan ifisser: l-exceptions iridu jinqabdu u jiġu rreġistrati, imma qatt ma għandhom jispiċċaw fil-browser bit-test SQL, ismijiet ta' tabelli jew aċċessi. Kif dan jinfired b'mod nadif tiddeskrivi l-paġna [Żbalji u exceptions f'PHP](https://phpsos.de/mt/php/fehler-und-exceptions/).

## L-aċċessi u d-drittijiet jinħarġu sew

Id-database hija mħarsa biss daqs l-aċċessi tagħha. Dawn ir-regoli ġew ittestjati:

1. **Utent proprju għal kull applikazzjoni:** Qatt tużaw l-amministratur tad-database għall-websajt.
2. **Biss id-drittijiet meħtieġa:** Websajt normalment teħtieġ qari, kitba, bidla u tħassir fid-database proprja tagħha, imma ebda drittijiet fuq databases oħra jew funzjonijiet tas-server.
3. **Ebda konnessjoni mill-bogħod mingħajr raġuni:** Id-database għandha tintlaħaq biss mis-server tal-web, mhux mill-internet.
4. **Aċċessi barra mill-webroot:** Fajls tal-konfigurazzjoni u `.env` m'għandhomx ikunu jistgħu jintalbu permezz ta' URL. Aktar dwar dan fl-artikolu [Ħarsien tal-aċċessi u tal-fajls .env](https://phpsos.de/mt/blog/env-dateien-schuetzen/).
5. **Konnessjoni ċċifrata b'servers separati:** Jekk id-database tinsab fuq magna oħra, il-konnessjoni għandha taħdem ċċifrata, biex l-aċċessi u l-kontenut ma jgħaddux fix-xibka bħala test ċar.
6. **Aċċessi proprji għall-manutenzjoni:** Backup, evalwazzjonijiet u amministraturi jirċievu utenti proprji. B'hekk fil-log jista' jiġi segwit min għamel xiex, u aċċess jista' jiġi msakkar mingħajr ma tiġi disturbata l-websajt.

## Databases, PHP2Shell u l-każ serju

PHP2Shell ma tolqotx id-database nnifisha, imma l-interpretatur ta' PHP: CVE-2026-109618 u CVE-2026-109619 jippermettu l-eżekuzzjoni ta' kodiċi malizzjuż mingħajr login. Jekk jirnexxi, il-kodiċi jaħdem bid-drittijiet tal-proċess ta' PHP u b'hekk bħala regola jista' jaqra l-fajl tal-konfigurazzjoni bl-aċċessi tad-database. Il-prepared statements ma jgħinux kontra dan, għax l-attakk ma jgħaddix minn mistoqsija SQL.

Obbligatorju għalhekk huwa l-aġġornament għal PHP 8.5.12, 8.4.27, 8.3.36 jew 8.2.35 u r-restart tal-proċessi kollha ta' PHP. Jekk hemm indikazzjonijiet ta' attakk b'suċċess, jappartjenu aċċessi ġodda tad-database, verifika tad-database għal kontenut injettat u valutazzjoni tal-obbligu ta' notifika skont il-GDPR. Hawnhekk [Incident Response](https://phpsos.de/mt/leistungen/incident-response/) strutturata tagħmel sens.

> **Suġġeriment:**
> Ibdlu l-passwords tad-database biss wara t-tindif tas-server. Sakemm jaħdem kodiċi malizzjuż, jista' jaqra mill-ġdid ukoll aċċessi ġodda.

## Kif jgħin PHP SOS konkretament?

- Neżaminaw kif l-applikazzjoni tagħkom taċċessa d-database, u jekk l-utenti, id-drittijiet u l-aċċess tan-netwerk jaqblux mal-minimu.
- Nikkontrollaw jekk il-fajls tal-konfigurazzjoni u tal-aċċessi jinsabux barra mill-webroot u ma jintlaħqux pubblikament.
- Wara inċident niġġeddu l-aċċessi fl-ordni t-tajba u nivverifikaw id-database għal kodiċi injettat.
- Niddokumentaw ir-riżultati b'mod li l-uffiċjali tal-protezzjoni tad-data u l-assiguraturi jkunu jistgħu jsegwuhom.


## Mistoqsijiet frekwenti

**Għandi nuża PDO jew mysqli?**  
Għal proġetti ġodda PDO spiss ikun l-għażla aktar flessibbli, għax jaħdem ma' ħafna databases permezz tal-istess interface. mysqli jagħmel sens jekk tużaw esklussivament MySQL jew MariaDB u teħtieġu l-funzjonijiet speċjali tagħhom. It-tnejn huma siguri jekk il-prepared statements jintużaw b'mod konsistenti.

**PDO jitfa' awtomatikament exceptions meta jkun hemm żbalji?**  
Iva, minn PHP 8.0.0 PDO::ERRMODE_EXCEPTION huwa l-istandard. Qabel kien il-modalità silenzjuża, li fiha l-iżbalji setgħu jinkisbu biss permezz ta' errorCode() u errorInfo(). Applikazzjonijiet eqdem spiss għadhom jissettjaw il-modalità espliċitament.

**Placeholders jistgħu jissostitwixxu wkoll ismijiet ta' tabelli jew kolonni?**  
Le. Il-placeholders jirrappreżentaw valuri biss. Ismijiet ta' tabelli u kolonni, pereżempju għal ordni, iridu jiġu vverifikati kontra lista fissa ta' ismijiet permessi qabel ma jiddaħħlu fil-mistoqsija.

**Wara PHP2Shell irrid nibdel il-password tad-database?**  
L-aġġornament waħdu ma jitlobx dan. Imma jekk hemm indikazzjonijiet li s-server kien kompromess, l-aċċessi kollha fil-fajls tal-konfigurazzjoni jitqiesu magħrufa. Allura għandkom tiġġedduhom wara t-tindif.

## Sorsi

- [Manwal ta' PHP: PDO Prepared Statements](https://www.php.net/manual/en/pdo.prepared-statements.php)
- [Manwal ta' PHP: Trattament tal-iżbalji ta' PDO](https://www.php.net/manual/en/pdo.error-handling.php)
- [Manwal ta' PHP: mysqli::execute_query](https://www.php.net/manual/en/mysqli.execute-query.php)
- [Manwal ta' PHP: mysqli_driver::$report_mode](https://www.php.net/manual/en/mysqli-driver.report-mode.php)
