PHP: 使用 PDO 将 PHP 连接到 MySQL

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

👋 欢迎来到 Stackhero 文档!

Stackhero 提供现成的 PHP 云 解决方案,具有多种优势,包括:

  • 通过简单的 git push 在几秒钟内 部署您的应用程序。
  • 使用您自己的域名,并享受 HTTPS 证书的自动配置以增强安全性。
  • 享受自动备份一键更新以及简单、透明和可预测的定价带来的安心。
  • 通过私有和专用的 VM获得最佳的性能和强大的安全性

节省时间简化您的生活:只需 5 分钟即可试用 Stackhero 的 PHP 云托管 解决方案!

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' 这一行