PHP MySQL-extensies gebruiken in ServBay (mysqlnd, mysqli, PDO)
ServBay is een krachtige geïntegreerde lokale webontwikkelomgeving die de interactie tussen PHP-applicaties en databases aanzienlijk vereenvoudigt. Voor alle ondersteunde PHP-versies worden de belangrijkste MySQL-extensies — mysqlnd
, mysqli
en PDO_MySQL
— standaard vooraf geïnstalleerd en geactiveerd. Dit betekent dat je direct binnen je PHP-projecten met MySQL- of MariaDB-databases kunt werken, zonder extra configuratie.
Beschikbare PHP MySQL-extensies in ServBay
ServBay integreert drie populaire MySQL-extensies in zijn PHP-omgeving om compatibiliteit en prestaties te waarborgen:
- MySQL Native Driver (
mysqlnd
): De native driver van PHP, fungeert als onderliggende bibliotheek voormysqli
enPDO_MySQL
, verzorgt de communicatie met MySQL/MariaDB-servers, en biedt doorgaans betere prestaties en efficiënt geheugenbeheer. - MySQLi (
mysqli
): De MySQL Improved Extension biedt zowel een objectgeoriënteerde als een procedurele interface voor verbindingen met MySQL- en MariaDB-databases. Ondersteunt geavanceerde features zoals prepared statements, transacties, stored procedures en multi-query’s. - PDO MySQL (
PDO_MySQL
): De MySQL-driver voor PHP Data Objects (PDO). PDO biedt een uniforme database-abstractielaag, waardoor ontwikkelaars via één API met verschillende databases (zoals MySQL, MariaDB, PostgreSQL, SQLite, etc.) kunnen werken en de portabiliteit van de code vergroot wordt.
Status van activering
Binnen ServBay zijn de extensies mysqlnd
, mysqli
en PDO_MySQL
standaard ingeschakeld bij alle PHP-versies. Je hoeft geen extra stappen te ondernemen om ze te activeren. ServBay verzorgt de relevante php.ini
-instellingen, zodat je deze extensies direct kunt gebruiken voor je databaseverbindingen.
Gedetailleerde uitleg over de PHP MySQL-extensies
Begrip van de verschillen tussen deze drie extensies helpt je de beste keuze te maken voor je project:
MySQL Native Driver (
mysqlnd
)- Functie:
mysqlnd
is een in C geschreven native PHP-driver die de basis vormt voor de communicatie tussen PHP en MySQL/MariaDB-databases. - Belangrijkste kenmerken: Sinds PHP 5.3 is
mysqlnd
de standaard onderliggende bibliotheek voormysqli
enPDO_MySQL
. Het is direct geïntegreerd in PHP en vereist geen externe MySQL-clientbibliotheek (zoalslibmysqlclient
). - Belangrijkste voordelen: Vergeleken met de oudere
libmysqlclient
biedtmysqlnd
vaak betere prestaties, zuiniger geheugenbeheer, ondersteuning voor asynchrone queries, verbeterde persistent connecties en een rijke plugin-API. Je werkt doorgaans niet rechtstreeks met demysqlnd
-API, maar profiteert viamysqli
ofPDO
van de voordelen.
- Functie:
MySQLi (
mysqli
)- Functie: De MySQL Improved Extension is speciaal ontworpen om verbinding te maken met MySQL (vanaf 4.1.3) en MariaDB binnen PHP.
- Belangrijkste kenmerken: Biedt zowel objectgeoriënteerde als procedurele interfaces. Ondersteunt prepared statements (bescherming tegen SQL-injecties), transactiebeheer, stored procedures en multi-queries.
- Belangrijkste voordelen: Zeer uitgebreid, geoptimaliseerd voor MySQL/MariaDB en levert uitstekende prestaties. Indien je applicatie uitsluitend MySQL of MariaDB gebruikt en je hun geavanceerde mogelijkheden optimaal wilt benutten, is
mysqli
een solide keuze.
PDO MySQL (
PDO_MySQL
)- Functie: PHP Data Objects (PDO) biedt een lichte, consistente interface voor het ontsluiten van diverse databases.
PDO_MySQL
is de specifieke driver voor MySQL/MariaDB. - Belangrijkste kenmerken: Interactie via een uniforme API (de
PDO
- enPDOStatement
-klassen). Past standaard prepared statements toe (metprepare()
enexecute()
) om SQL-injecties te voorkomen. Ondersteunt transacties. - Belangrijkste voordelen: De database-portabiliteit is het grootste voordeel van PDO. Als je applicatie ooit naar PostgreSQL, SQLite of een andere ondersteunde database moet overstappen, beperkt PDO het benodigde herwerk. De objectgeoriënteerde API houdt je code veilig, overzichtelijk en compact. Voor nieuwe projecten wordt PDO meestal aangeraden.
- Functie: PHP Data Objects (PDO) biedt een lichte, consistente interface voor het ontsluiten van diverse databases.
PHP-voorbeeld: verbinding maken en werken met databases
Hieronder zie je voorbeelden van het gebruik van de mysqli
- en PDO
-extensie om verbinding te maken met een database die door ServBay beheerd wordt (bijvoorbeeld MariaDB of MySQL) en enkele basisbewerkingen uit te voeren.
Voorwaarden:
- De MySQL- of MariaDB-service draait in ServBay.
- Er bestaat een database genaamd
servbay_db
. - Je hebt een gebruiker aangemaakt genaamd
servbay_user
met het wachtwoordyour_password
, met de juiste rechten opservbay_db
. - In de database bestaat een tabel
users
met de kolommenid
(INT, PK, AI),name
(VARCHAR),email
(VARCHAR) enage
(INT).
Je kunt deze instellingen eenvoudig aanbrengen via phpMyAdmin in ServBay of een andere databasebeheerder.
Voorbeeldcode (mysqli
-methode)
php
<?php
// --- mysqli 示例 ---
// 数据库连接参数
$servername = "127.0.0.1"; // of 'localhost'
$port = 3306; // Standaardpoort MySQL/MariaDB in ServBay
$username = "servbay_user";
$password = "your_password"; // Vervang door je werkelijke wachtwoord
$dbname = "servbay_db";
// 创建 mysqli 连接(面向对象方式)
$conn = new mysqli($servername, $username, $password, $dbname, $port);
// 检查连接是否成功
if ($conn->connect_error) {
die("mysqli Connection failed: " . $conn->connect_error);
}
echo "mysqli Connected successfully<br>";
// 插入数据 (使用预处理语句防止 SQL 注入)
$stmt = $conn->prepare("INSERT INTO users (name, email, age) VALUES (?, ?, ?)");
$name = "ServBay Demo";
$email = "[email protected]";
$age = 5;
// "ssi" 表示 string, string, integer 类型
$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();
// 查询数据
$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>";
// 输出数据
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>";
}
// 关闭连接
$conn->close();
?>
1
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
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
Voorbeeldcode (PDO
-methode)
php
<?php
// --- PDO 示例 ---
// 数据库连接参数
$host = '127.0.0.1'; // of 'localhost'
$port = 3306; // Standaardpoort MySQL/MariaDB in ServBay
$dbname = 'servbay_db';
$username = 'servbay_user';
$password = 'your_password'; // Vervang door je werkelijke wachtwoord
$charset = 'utf8mb4';
// 数据源名称 (DSN)
$dsn = "mysql:host=$host;port=$port;dbname=$dbname;charset=$charset";
// PDO 连接选项
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // Gooi uitzonderingen i.p.v. waarschuwingen
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // Standaard associative array ophalen
PDO::ATTR_EMULATE_PREPARES => false, // Gebruik native prepared statements
];
try {
// 创建 PDO 连接实例
$pdo = new PDO($dsn, $username, $password, $options);
echo "PDO Connected successfully<br>";
// 插入数据 (使用预处理语句)
$sql = "INSERT INTO users (name, email, age) VALUES (:name, :email, :age)";
$stmt = $pdo->prepare($sql);
$name = 'ServBay PDO Demo';
$email = '[email protected]';
$age = 10;
// 绑定参数并执行
$stmt->execute([
':name' => $name,
':email' => $email,
':age' => $age
]);
echo "PDO: New record created successfully<br>";
// 查询数据
$stmt = $pdo->prepare("SELECT id, name, email, age FROM users WHERE name = :name");
$stmt->execute([':name' => 'ServBay PDO Demo']);
// 获取所有结果
$users = $stmt->fetchAll(); // Gebruik standaard 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) {
// 捕获并显示连接或查询错误
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
// PDO 连接在脚本结束时通常会自动关闭,无需显式调用 close()
// $pdo = null; // Kan expliciet op null gezet worden om af te sluiten
?>
1
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
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
Code plaatsen: Sla een van bovenstaande voorbeelden op als een .php
-bestand (bijvoorbeeld db_test_mysqli.php
of db_test_pdo.php
) en plaats deze in de hoofdmap van je ServBay-website (zoals /Applications/ServBay/www/myproject/
). Bezoek vervolgens het juiste adres in je browser (zoals http://myproject.servbay.demo/db_test_mysqli.php
). Controleer of je website correct is ingesteld en actief is in ServBay.
Veelgestelde vragen (FAQ)
Vraag: Moet ik handmatig de MySQL-extensies voor PHP installeren in ServBay?
Antwoord: Nee. ServBay heeft voor álle beheerde PHP-versies mysqlnd
, mysqli
en PDO_MySQL
van tevoren geïnstalleerd en geactiveerd. Je hoeft niets te installeren of te configureren; je kunt deze extensies direct in je PHP-code gebruiken.
Vraag: Moet ik kiezen voor mysqli
of PDO
?
Antwoord:
- Aanbevolen: PDO — Als je applicatie mogelijk meerdere databases moet ondersteunen (niet alleen MySQL/MariaDB), of je wilt gebruikmaken van een moderne, objectgeoriënteerde en beter overdraagbare code, kies dan voor PDO. Deze dwingt prepared statements af en bevordert daarmee veilige code.
- Overweeg mysqli — Gebruik je uitsluitend MySQL of MariaDB en wil je profiteren van hun specifieke geavanceerde functies, dan is
mysqli
krachtig en snel. Het biedt zowel OO- als procedurele API’s.
Voor nieuwe projecten wordt over het algemeen PDO aangeraden.
Vraag: Welke verbindingsparameters gebruik ik voor MySQL/MariaDB in ServBay?
Antwoord:
- Host: Gewoonlijk
127.0.0.1
oflocalhost
. - Poort: De standaardpoort is
3306
, maar controleer dit in het ServBay-pakketbeheer als je niet zeker bent. - Gebruikersnaam / wachtwoord: Gebruik een bestaande databasegebruiker binnen MySQL/MariaDB. Voor nieuwe omgevingen moet je mogelijk handmatig een gebruiker aanmaken of (niet aanbevolen) tijdelijk ‘root’ gebruiken. Je beheert gebruikers en rechten via phpMyAdmin in ServBay of via andere tools.
- Databasenaam: De naam van de database waarmee je wilt verbinden.
Vraag 4: Mijn legacy-project gebruikt de verouderde mysql_*
-functies; ondersteunt ServBay dit?
Antwoord: Ja, om het onderhoud en de migratie van oudere applicaties te vergemakkelijken bevat de PHP 5.6 omgeving van ServBay nog ondersteuning voor de oude mysql_*
-functies (zoals mysql_connect
). Let op: deze zijn in PHP 5.5 als ‘verouderd’ aangemerkt en in PHP 7 volledig verwijderd. Met PHP 5.6 in ServBay kun je projecten draaien die hier nog op leunen, zonder op zoek te moeten naar een verouderde PHP-versie.
Echter, het volgende advies geldt nadrukkelijk:
- Gebruik deze support alleen voor tijdelijke compatibiliteit of het in stand houden van legacy-code.
- Migreer voor nieuwe projecten of refactors altijd naar de moderne en veilige
mysqli
ofPDO
extensies.mysql_*
-functies zijn onveilig (bijvoorbeeld gevoelig voor SQL-injecties) en missen moderne database-features.
Conclusie
ServBay vereenvoudigt met vooraf geïnstalleerde en standaard geactiveerde mysqlnd
, mysqli
en PDO_MySQL
in alle PHP-versies, én ondersteuning voor verouderde mysql_*
-functies in PHP 5.6, het ontwikkelproces van PHP-databasetoepassingen enorm. Je hoeft geen gedoe te hebben met extensie-installaties of configuratie; kies simpelweg de beste extensie voor jouw project (PDO of mysqli wordt aanbevolen) en verbind eenvoudig met MySQL- of MariaDB-databases in ServBay.
Dankzij deze probleemloze out-of-the-box ervaring kun je je volledig richten op de logica van je applicatie en maak je optimaal gebruik van een stabiele, snelle lokale omgeving voor het ontwikkelen, testen en onderhouden van je webdiensten met ServBay.