Utilizzo delle Estensioni PHP MySQL (mysqlnd, mysqli, PDO) in ServBay
ServBay, un potente ambiente di sviluppo web locale integrato, semplifica notevolmente l’interazione tra le applicazioni PHP e i database. Per tutte le versioni PHP supportate, le estensioni fondamentali per MySQL—mysqlnd
, mysqli
e PDO_MySQL
—sono già preinstallate e attivate di default. Questo significa che puoi iniziare subito a gestire i dati nei database MySQL o MariaDB nei tuoi progetti PHP, senza dover effettuare configurazioni manuali.
Estensioni PHP MySQL disponibili in ServBay
ServBay include le tre principali estensioni MySQL all’interno del suo ambiente PHP gestito, garantendo così compatibilità e prestazioni ottimali:
- MySQL Native Driver (
mysqlnd
): Il driver nativo di PHP, utilizzato come libreria di base permysqli
ePDO_MySQL
. Fornisce il livello fondamentale per la comunicazione tra PHP e i server MySQL/MariaDB, offrendo generalmente prestazioni e gestione della memoria migliori. - MySQLi (
mysqli
): MySQL Improved Extension, disponibile sia come interfaccia orientata agli oggetti sia procedurale, progettata specificamente per la connessione a database MySQL e MariaDB. Supporta funzionalità avanzate come statement preparati, transazioni, stored procedure e query multiple. - PDO MySQL (
PDO_MySQL
): Il driver PDO per MySQL. PDO (PHP Data Objects) offre un layer di astrazione per l’accesso ai database, permettendo agli sviluppatori di interagire con diversi tipi di database (MySQL, MariaDB, PostgreSQL, SQLite e altri) tramite una API coerente, facilitando la portabilità del codice.
Stato di abilitazione
In ServBay, tutte le estensioni mysqlnd
, mysqli
e PDO_MySQL
sono abilitate di default su ogni versione di PHP. Non è necessaria nessuna azione aggiuntiva per attivarle. La configurazione del file php.ini
viene gestita automaticamente da ServBay, così puoi utilizzare direttamente queste estensioni nel codice per collegarti al database.
Dettaglio delle Estensioni PHP MySQL
Comprendere le differenze tra queste tre estensioni ti aiuterà a scegliere la più adatta alle esigenze del tuo progetto:
MySQL Native Driver (
mysqlnd
)- Ruolo principale:
mysqlnd
è un driver nativo per PHP, scritto in C, che fornisce il livello di base per la comunicazione tra PHP e i server MySQL/MariaDB. - Caratteristiche chiave: Dalla versione PHP 5.3,
mysqlnd
è diventata la libreria di default sottomysqli
ePDO_MySQL
. È integrata direttamente in PHP, senza bisogno di collegarsi a librerie client esterne comelibmysqlclient
. - Vantaggi principali: Rispetto a
libmysqlclient
,mysqlnd
in genere offre prestazioni migliori, gestione della memoria più efficiente e supporta funzionalità avanzate come query asincrone, miglioramenti nelle connessioni persistenti e una ricca API per plugin. È raro interagire direttamente con l’API dimysqlnd
; ne si sfruttano i vantaggi tramitemysqli
oPDO
.
- Ruolo principale:
MySQLi (
mysqli
)- Ruolo principale: La MySQL Improved Extension è pensata per lavorare con MySQL (versione 4.1.3 o superiore) e MariaDB.
- Caratteristiche chiave: Offre due stili di programmazione—orientato agli oggetti e procedurale. Supporta statement preparati (per una migliore protezione contro l’SQL injection), controllo delle transazioni, chiamate di stored procedure, esecuzione di query multiple e altre feature avanzate di MySQL/MariaDB.
- Vantaggi principali: È completa di funzionalità, ottimizzata per MySQL/MariaDB e offre ottime prestazioni. Se sai che il tuo progetto utilizzerà solo MySQL/MariaDB e vuoi sfruttarne tutte le funzionalità avanzate,
mysqli
è una scelta affidabile.
PDO MySQL (
PDO_MySQL
)- Ruolo principale: PHP Data Objects (PDO) fornisce un’interfaccia leggera e coerente per l’accesso a diversi database.
PDO_MySQL
è il driver specifico per MySQL e MariaDB. - Caratteristiche chiave: Consente di operare sui database tramite un’API unificata (classi
PDO
,PDOStatement
). Forza l’utilizzo di statement preparati (prepare()
edexecute()
), che rappresentano la migliore prassi per prevenire l’SQL injection. Supporta le transazioni. - Vantaggi principali: Portabilità tra database è il massimo punto di forza di PDO. Se prevedi di migrare o supportare altri database (PostgreSQL, SQLite, ecc.), PDO permette di ridurre al minimo le modifiche al codice. Fornisce un’interfaccia chiara e orientata agli oggetti, rendendo il codice più sicuro e compatto. Per i progetti nuovi, si consiglia generalmente PDO.
- Ruolo principale: PHP Data Objects (PDO) fornisce un’interfaccia leggera e coerente per l’accesso a diversi database.
Esempi di codice PHP: Connessione e operazioni sul database
Di seguito sono riportati esempi pratici di come connettersi, tramite estensioni mysqli
e PDO
, ad un database gestito da ServBay (MariaDB o MySQL) ed eseguire alcune operazioni di base.
Prerequisiti:
- Il servizio MySQL o MariaDB deve essere in esecuzione in ServBay.
- Si assume che tu abbia creato un database chiamato
servbay_db
. - Si assume che tu abbia creato l’utente
servbay_user
, con passwordyour_password
, e con i permessi opportuni suservbay_db
. - Si assume che all’interno di
servbay_db
esista una tabellausers
con le colonneid
(INT, PK, AI),name
(VARCHAR),email
(VARCHAR),age
(INT).
Puoi utilizzare phpMyAdmin integrato in ServBay oppure altri strumenti gestione database per creare utenti, database e tabelle.
Codice di esempio (utilizzando mysqli
)
<?php
// --- Esempio con mysqli ---
// Parametri di connessione al database
$servername = "127.0.0.1"; // oppure 'localhost'
$port = 3306; // porta di default MySQL/MariaDB in ServBay
$username = "servbay_user";
$password = "your_password"; // Sostituisci con la tua password effettiva
$dbname = "servbay_db";
// Creazione connessione mysqli (stile orientato agli oggetti)
$conn = new mysqli($servername, $username, $password, $dbname, $port);
// Controllo della connessione
if ($conn->connect_error) {
die("mysqli Connection failed: " . $conn->connect_error);
}
echo "mysqli Connected successfully<br>";
// Inserimento dati (con statement preparato per prevenire SQL injection)
$stmt = $conn->prepare("INSERT INTO users (name, email, age) VALUES (?, ?, ?)");
$name = "ServBay Demo";
$email = "[email protected]";
$age = 5;
// "ssi" indica stringa, stringa, intero
$stmt->bind_param("ssi", $name, $email, $age);
if ($stmt->execute()) {
echo "mysqli: New record created successfully<br>";
} else {
echo "mysqli Error: " . $stmt->error . "<br>";
}
$stmt->close();
// Query dati
$sql = "SELECT id, name, email, age FROM users WHERE name = 'ServBay Demo'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
echo "mysqli Queried data:<br>";
// Output dei dati
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Email: " . $row["email"]. " - Age: " . $row["age"]. "<br>";
}
} else {
echo "mysqli: 0 results found<br>";
}
// Chiusura connessione
$conn->close();
?>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Codice di esempio (utilizzando PDO
)
<?php
// --- Esempio con PDO ---
// Parametri di connessione al database
$host = '127.0.0.1'; // oppure 'localhost'
$port = 3306; // porta di default MySQL/MariaDB in ServBay
$dbname = 'servbay_db';
$username = 'servbay_user';
$password = 'your_password'; // Sostituisci con la tua password effettiva
$charset = 'utf8mb4';
// DSN - Data Source Name
$dsn = "mysql:host=$host;port=$port;dbname=$dbname;charset=$charset";
// Opzioni PDO
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // Lancia eccezioni anziché warning
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // Restituisce array associativi di default
PDO::ATTR_EMULATE_PREPARES => false, // Usa statement preparati nativi
];
try {
// Creazione istanza di connessione PDO
$pdo = new PDO($dsn, $username, $password, $options);
echo "PDO Connected successfully<br>";
// Inserimento dati (usando statement preparato)
$sql = "INSERT INTO users (name, email, age) VALUES (:name, :email, :age)";
$stmt = $pdo->prepare($sql);
$name = 'ServBay PDO Demo';
$email = '[email protected]';
$age = 10;
// Bind dei parametri ed esecuzione
$stmt->execute([
':name' => $name,
':email' => $email,
':age' => $age
]);
echo "PDO: New record created successfully<br>";
// Query dati
$stmt = $pdo->prepare("SELECT id, name, email, age FROM users WHERE name = :name");
$stmt->execute([':name' => 'ServBay PDO Demo']);
// Fetched results
$users = $stmt->fetchAll(); // Di default FETCH_ASSOC
if ($users) {
echo "PDO Queried data:<br>";
foreach ($users as $row) {
echo "id: " . $row['id'] . " - Name: " . $row['name'] . " - Email: " . $row['email'] . " - Age: " . $row['age'] . "<br>";
}
} else {
echo "PDO: 0 results found<br>";
}
} catch (\PDOException $e) {
// Gestione errori di connessione o query
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
// La connessione PDO viene normalmente chiusa in automatico a fine script, non serve chiamare close()
// $pdo = null; // Puoi comunque settarlo a null per chiudere la connessione manualmente
?>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
Come usare i codice di esempio: Salva uno degli esempi sopra come file .php
(ad esempio db_test_mysqli.php
o db_test_pdo.php
) nella root del tuo sito ServBay (es., /Applications/ServBay/www/myproject/
). Poi accedi tramite browser al relativo URL (es., http://myproject.servbay.demo/db_test_mysqli.php
). Assicurati che il tuo sito sia correttamente configurato e attivo in ServBay.
Domande Frequenti (FAQ)
D: Devo installare manualmente le estensioni MySQL di PHP in ServBay?
R: No, non è necessario. Tutte le versioni PHP gestite da ServBay hanno già preinstallate e abilitate di default le estensioni chiave mysqlnd
, mysqli
e PDO_MySQL
. Puoi usarle direttamente nel tuo codice PHP, senza doverle installare o configurare manualmente.
D: Tra mysqli
e PDO
, quale dovrei scegliere?
R:
- Consigliato PDO: Se prevedi che la tua applicazione possa dover supportare più tipi di database (non solo MySQL/MariaDB), o desideri un codice più moderno, portabile e orientato agli oggetti, PDO è la scelta migliore. Forza l’utilizzo degli statement preparati, contribuendo ad una maggiore sicurezza.
- Considera mysqli: Se il tuo progetto userà solo MySQL o MariaDB e desideri sfruttare le funzionalità avanzate che offrono,
mysqli
è una soluzione affidabile e performante, con interfaccia sia ad oggetti che procedurale.
Per i nuovi progetti, la scelta consigliata è generalmente PDO.
D: Come posso conoscere i parametri di connessione al servizio MySQL/MariaDB di ServBay?
R:
- Host: Di solito si utilizza
127.0.0.1
olocalhost
. - Porta: Il valore di default per MySQL e MariaDB in ServBay è generalmente
3306
. Puoi verificare la porta esatta nell’interfaccia gestione pacchetti di ServBay. - Username / Password: Utilizza le credenziali dell’utente creato all’interno di MySQL/MariaDB. Per il primo accesso potrebbe essere necessario creare un utente o usare quello root (sconsigliato in produzione). Puoi gestire utenti e permessi tramite phpMyAdmin di ServBay o altri strumenti database.
- Nome del database: Inserisci il nome del database a cui vuoi collegarti.
D: Ho un progetto legacy che utilizza le funzioni mysql_*
, ancora supportate da ServBay?
R: Sì. Per facilitare la manutenzione o la migrazione di vecchie applicazioni, ServBay offre supporto alle funzioni legacy mysql_*
(es. mysql_connect
) esclusivamente nell’ambiente PHP 5.6. Queste funzioni sono deprecate da PHP 5.5 e rimosse a partire da PHP 7.0. Grazie al PHP 5.6 incluso in ServBay, puoi eseguire codice che dipende da queste vecchie API senza dover reperire versioni PHP più datate.
Tieni comunque presente che:
- Usa questa funzionalità solo per compatibilità temporanea o per progetti legacy.
- Per nuovi progetti o durante la ristrutturazione di codice esistente, migra obbligatoriamente verso le estensioni moderne
mysqli
oPDO
. Le funzionimysql_*
sono insicure (vulnerabili a SQL injection) e carenti delle funzionalità moderne dei database.
Conclusione
ServBay, grazie al pre-caricamento e all’attivazione automatica delle estensioni mysqlnd
, mysqli
e PDO_MySQL
su tutte le versioni di PHP, e al supporto delle funzioni legacy mysql_*
su PHP 5.6, semplifica drasticamente il lavoro dei programmatori PHP con i database. Non dovrai più preoccuparti dell’installazione o configurazione delle estensioni: puoi scegliere direttamente nel tuo codice l’estensione più adatta al progetto (si consiglia PDO o mysqli) per collegarti e operare sui database MySQL o MariaDB presenti nell’ambiente ServBay.
Questa praticità "pronta all’uso" ti permette di dedicarti allo sviluppo della logica della tua applicazione, sfruttando un ambiente locale stabile ed efficiente per costruire, testare e mantenere rapidamente i tuoi servizi web.