PHP: 使用 PDO 将 PHP 连接到 MySQL

本文件是连接到 MySQL指南的一部分。您可以在这里查看完整指南:学习如何使用 MySQLi 和 PDO 从 PHP 连接到 MySQL

👋 欢迎来到 Stackhero 文档!

Stackhero 提供了一个专为快速、可靠部署而设计的 PHP cloud 平台:

  • 只需简单的 git push,即可将您的 PHP 应用快速部署到生产环境
  • 支持自定义域名,自动为您配置 HTTPS 证书,无需手动操作。
  • 依靠自动备份一键更新以及清晰、可预测的定价。Stackhero 会为您处理这些细节,让您专注于代码开发。
  • 享受专为您的应用打造的高性能高安全性的私有专用基础设施。

让您的工作流程更顺畅,节省宝贵时间。只需几分钟即可开始体验 Stackhero 的 PHP cloud hosting

PDO 提供了一种灵活的方法来将 PHP 连接到 MySQL。下面的示例说明了如何使用 PDO 建立连接。它还解决了如果您的系统无法访问 CA 证书时可能出现的 SSL 证书问题。

<?php

$hostname = '<XXXXXX>.stackhero-network.com';
$user = 'root';
$password = '<yourPassword>';
$database = 'root'; // 对于生产环境,请考虑创建专用的数据库和用户

$dsn = "mysql:host=$hostname;dbname=$database";

$options = array(
  // 如果您遇到类似 "Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1..." 的错误,
  // 可能是因为 /etc/ssl/certs/ 目录缺少 CA 证书
  PDO::MYSQL_ATTR_SSL_CAPATH => '/etc/ssl/certs/',
  // PDO::MYSQL_ATTR_SSL_CA => 'isrgrootx1.pem',
  PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => true,
);

$pdo = new PDO($dsn, $user, $password, $options);

$stm = $pdo->query('SELECT VERSION()');
$version = $stm->fetch();

echo '您已连接到运行版本 ' . $version[0] . " 的数据库\n";

?>

如果您看到类似 Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed 的错误,很可能是您的系统的 /etc/ssl/certs/ 目录中没有包含必要的 CA 证书。

如果您可以访问运行 PHP 代码的系统,可以按以下步骤安装证书:

  1. Ubuntu/Debian 上,运行 sudo apt-get install ca-certificates
  2. Alpine Linux 上,运行 apk add ca-certificates

如果您无法直接在系统上安装这些证书,可以手动安装证书:

  1. 下载证书到您的计算机:https://letsencrypt.org/certs/isrgrootx1.pem
  2. isrgrootx1.pem 文件添加到您的 PHP 项目文件中。
  3. 注释掉 PDO::MYSQL_ATTR_SSL_CAPATH => '/etc/ssl/certs/' 这一行
  4. 取消注释 PDO::MYSQL_ATTR_SSL_CA => 'isrgrootx1.pem' 这一行