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 函数。