PHP PDO::__construct 方法
最后修改于 2025 年 4 月 19 日
PDO::__construct 方法创建一个新的 PDO 实例,表示与数据库的连接。这是使用 PDO 在 PHP 中建立数据库连接的主要方式。
基本定义
PDO::__construct 创建一个新的 PHP Data Objects (PDO) 实例。这表示 PHP 与数据库服务器之间的连接。该方法接受一个 DSN (Data Source Name) 参数。
语法:public PDO::__construct(string $dsn, string $username = null, string $password = null, array $options = null)。DSN 包含数据库类型、主机和数据库名称。
MySQL 连接示例
这展示了如何使用 PDO::__construct 连接到 MySQL 数据库。
<?php
declare(strict_types=1);
$dsn = 'mysql:host=localhost;dbname=testdb;charset=utf8mb4';
$username = 'dbuser';
$password = 'dbpass';
try {
$pdo = new PDO($dsn, $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected to MySQL successfully";
} catch (PDOException $e) {
die("Connection failed: " . $e->getMessage());
}
这创建了一个到 MySQL 数据库的连接。DSN 指定了主机、数据库名称和字符集。我们设置错误模式为异常,以获得更好的错误处理。
SQLite 连接示例
这演示了如何使用 PDO 连接到 SQLite 数据库文件。
<?php
declare(strict_types=1);
$databaseFile = 'example.db';
try {
$pdo = new PDO("sqlite:$databaseFile");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected to SQLite database successfully";
} catch (PDOException $e) {
die("Connection failed: " . $e->getMessage());
}
对于 SQLite,DSN 更简单——只需驱动程序和数据库文件路径。对于 SQLite 文件数据库,不需要用户名或密码。
PostgreSQL 连接示例
这展示了如何使用 PDO 连接到 PostgreSQL 数据库。
<?php
declare(strict_types=1);
$dsn = 'pgsql:host=localhost;port=5432;dbname=testdb';
$username = 'pguser';
$password = 'pgpass';
try {
$pdo = new PDO($dsn, $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected to PostgreSQL successfully";
} catch (PDOException $e) {
die("Connection failed: " . $e->getMessage());
}
PostgreSQL DSN 包括主机、端口和数据库名称。PostgreSQL 需要通过用户名和密码进行身份验证。
带选项的连接
这演示了将连接选项传递给 PDO 构造函数。
<?php
declare(strict_types=1);
$dsn = 'mysql:host=localhost;dbname=testdb';
$username = 'dbuser';
$password = 'dbpass';
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
try {
$pdo = new PDO($dsn, $username, $password, $options);
echo "Connected with custom options successfully";
} catch (PDOException $e) {
die("Connection failed: " . $e->getMessage());
}
options 数组配置 PDO 的行为。我们设置了错误模式、获取模式,并禁用了预处理语句的模拟。选项也可以稍后使用 setAttribute 设置。
持久连接
这展示了如何使用 PDO 创建持久的数据库连接。
<?php
declare(strict_types=1);
$dsn = 'mysql:host=localhost;dbname=testdb';
$username = 'dbuser';
$password = 'dbpass';
$options = [
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
];
try {
$pdo = new PDO($dsn, $username, $password, $options);
echo "Persistent connection established successfully";
} catch (PDOException $e) {
die("Connection failed: " . $e->getMessage());
}
持久连接在脚本执行后保持打开状态,从而减少了开销。谨慎使用它们,因为它们可能导致过多的打开连接。
带 SSL 的连接
这演示了如何建立安全的 MySQL 连接(使用 SSL)。
<?php
declare(strict_types=1);
$dsn = 'mysql:host=localhost;dbname=testdb';
$username = 'dbuser';
$password = 'dbpass';
$options = [
PDO::MYSQL_ATTR_SSL_CA => '/path/to/ca-cert.pem',
PDO::MYSQL_ATTR_SSL_CERT => '/path/to/client-cert.pem',
PDO::MYSQL_ATTR_SSL_KEY => '/path/to/client-key.pem',
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
];
try {
$pdo = new PDO($dsn, $username, $password, $options);
echo "Secure SSL connection established successfully";
} catch (PDOException $e) {
die("Connection failed: " . $e->getMessage());
}
这配置了 MySQL 连接的 SSL。选项指定了证书文件,并禁用服务器证书验证(不推荐在生产环境中使用)。
带自定义属性的连接
这展示了在连接期间设置自定义的、特定于驱动程序的属性。
<?php
declare(strict_types=1);
$dsn = 'mysql:host=localhost;dbname=testdb';
$username = 'dbuser';
$password = 'dbpass';
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4",
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,
PDO::ATTR_TIMEOUT => 5
];
try {
$pdo = new PDO($dsn, $username, $password, $options);
echo "Connection with custom attributes established";
} catch (PDOException $e) {
die("Connection failed: " . $e->getMessage());
}
这设置了特定于 MySQL 的属性,如 INIT_COMMAND 和 USE_BUFFERED_QUERY。ATTR_TIMEOUT 设置了连接超时。不同的驱动程序支持不同的自定义属性。
最佳实践
- DSN 格式:始终为您的数据库使用正确的 DSN 格式。
- 错误处理:始终使用 try-catch 块来处理 PDO。
- 安全凭据:安全地存储凭据,不要放在代码中。
- 字符集:在 DSN 中指定字符集或使用 INIT_COMMAND。
- 连接选项:在连接期间设置重要的选项。
来源
本教程涵盖了 PDO::__construct 方法,并提供了实用的示例,展示了不同的数据库连接和配置选项。
作者
列出 所有 PHP PDO 函数。