PHP: MySQLへの接続
MySQLiとPDOを使用してPHPからMySQLに接続する方法を学びます
👋 Stackheroのドキュメントへようこそ!
Stackheroは、数多くの利点を提供する使いやすいPHPクラウドソリューションを提供しています。
- 簡単な
git pushでアプリケーションを数秒でデプロイ。- 独自のドメイン名を使用し、HTTPS証明書の自動設定による強化されたセキュリティを享受。
- 自動バックアップ、ワンクリックアップデート、そしてシンプルで透明性のある予測可能な価格設定で安心を提供。
- プライベートで専用のVMによる最適なパフォーマンスと強固なセキュリティを実現。
時間を節約し、生活を簡素化:StackheroのPHPクラウドホスティングソリューションを試すのに5分しかかかりません!
MySQLi(オブジェクト指向スタイル)を使用したPHPからMySQLへの接続
以下の例は、オブジェクト指向スタイルでMySQLiを使用してPHPをMySQLに接続する方法を示しています。アプリケーション専用のデータベースとユーザーを作成し、「root」アカウントを使用しないことがベストプラクティスです。このアプローチはアプリケーションのセキュリティを向上させます。
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$user = 'root';
$password = '<yourPassword>';
$database = 'root'; // 本番環境では、phpMyAdminで専用のデータベースとユーザーを作成してください
$mysqli = mysqli_init();
$mysqliConnected = $mysqli->real_connect($hostname, $user, $password, $database, NULL, NULL, MYSQLI_CLIENT_SSL);
if (!$mysqliConnected) {
die('接続エラー: ' . $mysqli->connect_error);
}
echo '接続成功... ' . $mysqli->host_info . "\n";
$mysqli->close();
?>
MySQLi(手続き型スタイル)を使用したPHPからMySQLへの接続
手続き型アプローチを好む場合、以下の例は手続き型スタイルでMySQLiを使用して接続を確立する方法を示しています。常に専用のデータベースと制限されたユーザーを使用することが推奨され、セキュリティが向上します。
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$user = 'root';
$password = '<yourPassword>';
$database = 'root'; // セキュリティを強化するために、phpMyAdminで専用のデータベースとユーザーを作成してください
$mysqli = mysqli_init();
$mysqliConnected = mysqli_real_connect($mysqli, $hostname, $user, $password, $database, NULL, NULL, MYSQLI_CLIENT_SSL);
if (!$mysqliConnected) {
die('接続エラー: ' . mysqli_connect_error($mysqli));
}
echo '成功: ' . mysqli_get_host_info($mysqli) . "\n";
mysqli_close($mysqli);
?>
PDOを使用したPHPからMySQLへの接続
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";
?>
"SSL operation failed with code 1"エラーの処理
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コードを実行しているシステムにアクセスできる場合、以下のように証明書をインストールできます。
- Ubuntu/Debianでは、
sudo apt-get install ca-certificatesを実行します - Alpine Linuxでは、
apk add ca-certificatesを実行します
システムにこれらの証明書を直接インストールするアクセス権がない場合、手動で証明書をインストールできます。
- 証明書をコンピュータにダウンロードします: https://letsencrypt.org/certs/isrgrootx1.pem
isrgrootx1.pemファイルをPHPプロジェクトファイルに追加します。PDO::MYSQL_ATTR_SSL_CAPATH => '/etc/ssl/certs/'行をコメントアウトしますPDO::MYSQL_ATTR_SSL_CA => 'isrgrootx1.pem'行をコメント解除します
環境変数からの資格情報を使用したPHPからMySQLへの接続
セキュリティを強化し、設定管理を容易にするために、ソースコードに資格情報をハードコーディングするのを避けることが推奨されます。代わりに、以下のように環境変数からこれらの設定を取得します。
<?php
$hostname = getenv('STACKHERO_MYSQL_HOST');
$user = getenv('STACKHERO_MYSQL_USER');
$password = getenv('STACKHERO_MYSQL_PASSWORD');
$database = getenv('STACKHERO_MYSQL_USER'); // 慣例として、データベース名はユーザー名と一致します
?>
環境変数を使用することで、資格情報のセキュリティを維持し、異なる環境での設定をより適応可能にします。