Verwendung der PHP MySQL-Erweiterungen (mysqlnd, mysqli, PDO) in ServBay
ServBay ist eine leistungsstarke, integrierte lokale Webentwicklungsumgebung, die die Anbindung von PHP-Anwendungen an Datenbanken maßgeblich vereinfacht. Alle unterstützten PHP-Versionen haben die wichtigsten MySQL-Datenbankerweiterungen – mysqlnd
, mysqli
und PDO_MySQL
– vorkonfiguriert und standardmäßig aktiviert. Das bedeutet, Sie können sofort und ohne manuelle Konfiguration mit MySQL- oder MariaDB-Datenbanken in Ihren PHP-Projekten arbeiten.
Verfügbare PHP MySQL-Erweiterungen in ServBay
ServBay liefert drei gängige MySQL-Erweiterungen direkt innerhalb der verwalteten PHP-Umgebung aus und gewährleistet damit Kompatibilität und Performance:
- MySQL Native Driver (
mysqlnd
): Der native Treiber für PHP, auf demmysqli
undPDO_MySQL
basieren. Er stellt die Basis für die Kommunikation mit MySQL/MariaDB-Servern dar und punktet durch gute Performance und optimiertes Speicher-Management. - MySQLi (
mysqli
): MySQL Improved Extension. Sie bietet eine objektorientierte sowie prozedurale Schnittstelle eigens für MySQL- und MariaDB-Datenbanken und unterstützt fortschrittliche Funktionen wie vorbereitete Statements, Transaktionen, Stored Procedures und Multi-Statement-Queries. - PDO MySQL (
PDO_MySQL
): Das MySQL-Driver-Modul für PHP Data Objects (PDO). PDO schafft eine einheitliche, abstrahierte Schnittstelle zur Anbindung verschiedenster Datenbanken (u.a. MySQL, MariaDB, PostgreSQL, SQLite) – das erhöht die Portabilität Ihres Codes erheblich.
Aktivierungsstatus
Die Erweiterungen mysqlnd
, mysqli
und PDO_MySQL
sind in allen PHP-Versionen unter ServBay standardmäßig aktiviert. Sie müssen hier keine weiteren Schritte vornehmen. ServBay kümmert sich vollautomatisch um alle nötigen Einstellungen in der php.ini
und Sie können diese Erweiterungen direkt im PHP-Code zur Datenbankanbindung nutzen.
Ausführlicher Vergleich der PHP MySQL-Erweiterungen
Das Verständnis der Unterschiede dieser Erweiterungen hilft Ihnen, die beste Wahl für Ihr Projekt zu treffen:
MySQL Native Driver (
mysqlnd
)- Kernfunktion:
mysqlnd
ist ein in C geschriebener nativer PHP-Treiber und fungiert als Basistechnologie für die Kommunikation zwischen PHP und MySQL/MariaDB-Datenbankservern. - Hauptmerkmale: Seit PHP 5.3 ist
mysqlnd
der Standard-Unterbau für diemysqli
- undPDO_MySQL
-Erweiterungen. Er ist direkt in PHP integriert und benötigt keine externe MySQL-Client-Bibliothek wielibmysqlclient
. - Schlüsselvorteile: Im Vergleich zu älteren Bibliotheken wie
libmysqlclient
bietetmysqlnd
meist eine bessere Performance, effizienteres Speicher-Management, Unterstützung für asynchrone Abfragen, verbesserte persistente Verbindungen sowie eine flexible Plugin-API. In der Praxis greifen Sie selten direkt auf diemysqlnd
-API zu, sondern profitieren übermysqli
oderPDO
von seinen Vorzügen.
- Kernfunktion:
MySQLi (
mysqli
)- Kernfunktion: Die MySQL Improved Extension wurde speziell für MySQL (ab Version 4.1.3) und MariaDB entwickelt.
- Hauptmerkmale: Sie bietet eine objektorientierte und eine prozedurale Programmierschnittstelle. Sie unterstützt vorbereitete Statements (wichtig für Schutz vor SQL-Injektionen), Transaktionskontrolle, Stored Procedures und Multi-Statements für moderne MySQL/MariaDB-Features.
- Schlüsselvorteile: Sehr funktionsreich, auf MySQL/MariaDB optimiert und performant. Falls Ihr Projekt ausschließlich diese Datenbanken nutzt und Sie deren spezifische Funktionen benötigen, ist
mysqli
eine zuverlässige Wahl.
PDO MySQL (
PDO_MySQL
)- Kernfunktion: PDO stellt eine schlanke, einheitliche Schnittstelle für zahlreiche Datenbanken bereit.
PDO_MySQL
ist der spezifische Treiber für MySQL/MariaDB. - Hauptmerkmale: Einfache, einheitliche API (zum Beispiel die Klassen
PDO
undPDOStatement
). Ausschließlich vorbereitete Statements mitprepare()
undexecute()
sind möglich, was optimalen Schutz vor SQL-Injektionen bietet. Transaktionen werden unterstützt. - Schlüsselvorteile: Portabilität. Wenn Ihre Anwendung eventuell auch mit PostgreSQL, SQLite oder anderen Datenbanken laufen soll, begrenzt PDO den Migrationsaufwand auf ein Minimum. Der objektorientierte Ansatz bringt meist klareren und sichereren Code. Für neue Projekte wird daher überwiegend PDO empfohlen.
- Kernfunktion: PDO stellt eine schlanke, einheitliche Schnittstelle für zahlreiche Datenbanken bereit.
PHP-Codebeispiele: Anbindung und Nutzung der Datenbank
Die folgenden Beispiele zeigen, wie Sie sich mit den Erweiterungen mysqli
und PDO
im PHP-Code mit einer von ServBay verwalteten Datenbank (z.B. MariaDB oder MySQL) verbinden und grundlegende Operationen durchführen.
Voraussetzungen:
- MySQL oder MariaDB-Dienst läuft in ServBay.
- Es existiert eine Datenbank namens
servbay_db
. - Ein Benutzer
servbay_user
mit Passwortyour_password
ist eingerichtet und hat eine Zugriffsberechtigung fürservbay_db
. - In der Datenbank
servbay_db
gibt es eine Tabelleusers
mit den Spaltenid
(INT, PK, AI),name
(VARCHAR),email
(VARCHAR),age
(INT).
Die Einrichtung kann über das in ServBay integrierte phpMyAdmin oder ein beliebiges Datenbank-Tool erfolgen.
Codebeispiel (Variante mysqli
)
php
<?php
// --- mysqli 示例 ---
// 数据库连接参数
$servername = "127.0.0.1"; // 或 'localhost'
$port = 3306; // ServBay 中 MySQL/MariaDB 的默认端口
$username = "servbay_user";
$password = "your_password"; // 请替换为您的实际密码
$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
Codebeispiel (Variante PDO
)
php
<?php
// --- PDO 示例 ---
// 数据库连接参数
$host = '127.0.0.1'; // 或 'localhost'
$port = 3306; // ServBay 中 MySQL/MariaDB 的默认端口
$dbname = 'servbay_db';
$username = 'servbay_user';
$password = 'your_password'; // 请替换为您的实际密码
$charset = 'utf8mb4';
// 数据源名称 (DSN)
$dsn = "mysql:host=$host;port=$port;dbname=$dbname;charset=$charset";
// PDO 连接选项
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // 抛出异常而不是警告
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // 默认获取关联数组
PDO::ATTR_EMULATE_PREPARES => false, // 使用原生预处理语句
];
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(); // 使用默认的 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; // 可以显式设置 null 来关闭
?>
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 speichern: Speichern Sie eines der obigen Codebeispiele als .php
-Datei (z.B. db_test_mysqli.php
oder db_test_pdo.php
) im Root-Verzeichnis Ihres ServBay-Webprojekts (z.B. /Applications/ServBay/www/myproject/
). Rufen Sie die Datei dann über den Browser auf, z.B. über http://myproject.servbay.demo/db_test_mysqli.php
. Achten Sie darauf, dass Ihre Website in ServBay korrekt eingerichtet und aktiv ist.
Häufig gestellte Fragen (FAQ)
F: Muss ich die MySQL-Erweiterungen für PHP manuell in ServBay installieren?
A: Nein, das ist nicht nötig. ServBay liefert die drei wichtigsten MySQL-Datenbankerweiterungen (mysqlnd
, mysqli
, PDO_MySQL
) bei sämtlichen verwalteten PHP-Versionen bereits mit und aktiviert sie automatisch. Sie können sie sofort im PHP-Code verwenden – ohne zusätzliche Installation oder Handarbeit.
F: Soll ich eher mysqli
oder PDO
verwenden?
A:
- Empfehlung: PDO – Wenn Sie eine Anwendung entwickeln, die womöglich mit unterschiedlichen Datenbanksystemen (nicht nur MySQL/MariaDB) arbeiten soll, oder Sie modernes, objektorientiertes und portables Coding wünschen, ist PDO die beste Wahl. Da ausschließlich vorbereitete Statements genutzt werden, bietet PDO auch einen verstärkten Schutz gegen SQL-Injektionen.
- Alternativ: mysqli – Wenn Ihr Projekt ausschließlich MySQL oder MariaDB einsetzt und Sie deren spezifische, fortgeschrittene Features nutzen möchten, ist
mysqli
eine performante Option. Sie können sowohl objektorientiert als auch prozedural entwickeln.
Für neue Projekte wird in der Regel zu PDO geraten.
F: Welche Verbindungsdaten benötige ich für das MySQL/MariaDB-Service in ServBay?
A:
- Hostname: In der Regel
127.0.0.1
oderlocalhost
. - Port: Der Standardport in ServBay für MySQL/MariaDB ist meistens
3306
. Sie können den konkreten Wert in der Paketübersicht von ServBay prüfen. - Benutzername / Passwort: Sie nutzen die Zugangsdaten eines zuvor erstellten Benutzers in Ihrer MySQL/MariaDB-Instanz. Für erste Tests können Sie einen neuen Account einrichten oder (nicht empfohlen für Produktivcode!) den root-Benutzer verwenden. Die Verwaltung erledigen Sie über das eingebaute phpMyAdmin oder ein beliebiges Datenbanktool.
- Datenbankname: Den Namen der gewünschten Datenbank, zu der Sie eine Verbindung aufbauen wollen.
F4: Mein Altsystem verwendet noch die veralteten mysql_*
-Funktionen. Wird das von ServBay unterstützt?
A: Ja, mit Rücksicht auf Legacy- und Migrationsprojekte enthält ServBay in der bereitgestellten PHP 5.6-Umgebung Unterstützung für die alten mysql_*
-Funktionen (wie etwa mysql_connect
). Diese Funktionen wurden ab PHP 5.5 als veraltet markiert und sind seit PHP 7.0 komplett entfernt. Mit ServBay und PHP 5.6 können Sie alten Code also weiterhin ausführen, ohne mühsam eine noch ältere PHP-Version suchen zu müssen.
Beachten Sie dringend:
- Nutzen Sie diese Unterstützung nur vorübergehend oder zur Wartung von Altprojekten.
- Für neue Projekte oder wenn Sie alten Code überarbeiten, sollten Sie dringend auf moderne und sichere Erweiterungen wie
mysqli
oderPDO
umstellen. Die altenmysql_*
-Funktionen bergen Sicherheitsrisiken (z.B. Anfälligkeit für SQL-Injektionen) und unterstützen aktuelle Datenbanktechnologien nicht mehr.
Fazit
ServBay vereinfacht den kompletten Workflow für PHP-Entwickler durch die vorinstallierten und standardmäßig aktivierten Erweiterungen mysqlnd
, mysqli
und PDO_MySQL
sowie die Kompatibilität der alten mysql_*
-Funktionen in PHP 5.6. Sie ersparen sich umständliche Installations- oder Konfigurationsarbeiten und wählen bequem im Code die für Ihr Projekt passende Erweiterung – empfohlen werden PDO oder mysqli – zur Entwicklung mit MySQL- oder MariaDB-Datenbanken im ServBay-Umfeld.
Durch diese sofort einsatzbereite Lösung können Sie sich ganz auf die eigentliche Anwendungsentwicklung konzentrieren – und profitieren von einer stabilen, schnellen lokalen Umgebung, um Ihre Webdienste effizient zu bauen, zu testen und zu erweitern.