【初心者向け】PHPでデータベース接続エラー「mysql_connect(): [2002] No such file or directory (trying to connect via unix:///tmp/mysql.sock) in」を解決する3つのステップ
PHPで「mysql_connect(): [2002] No such file or directory (trying to connect via unix:///tmp/mysql.sock) in」エラーが発生した場合の対処方法
このエラーは、PHPスクリプトがMySQLデータベースに接続しようとした際に、ソケットファイル /tmp/mysql.sock
が存在しない、またはアクセス権限がないために発生します。
原因
以下の原因が考えられます。
- MySQLサーバーが起動していない
- ソケットファイル /tmp/mysql.sock が存在しない
- PHPスクリプトの設定に誤りがある
解決方法
以下の方法で解決できます。
# systemctl status mysql
上記のコマンドを実行し、MySQLサーバーが起動していることを確認します。
ソケットファイルの存在確認
# ls -l /tmp/mysql.sock
上記のコマンドを実行し、ソケットファイル /tmp/mysql.sock
が存在することを確認します。
# ls -l /tmp/mysql.sock
以下の項目を確認します。
- データベース接続用のホスト名またはIPアドレス
- データベース名
- ユーザー名
- パスワード
これらの設定が誤っていると、接続エラーが発生します。
- 使用しているOS
- 使用しているMySQLのバージョン
補足
このエラーは、MySQL 5.7 以降で廃止された mysql_connect()
関数を使用している場合に発生します。新しいコードでは、mysqli_connect()
または PDO
などの接続方法を使用することを推奨します。
<?php
// データベース接続情報
$host = 'localhost';
$dbname = 'test';
$username = 'root';
$password = 'password';
// データベース接続
$mysqli = new mysqli($host, $username, $password, $dbname);
//接続エラーチェック
if ($mysqli->connect_errno) {
echo 'データベース接続エラー: ' . $mysqli->connect_error;
exit;
}
// クエリ実行
$sql = 'SELECT * FROM users';
$result = $mysqli->query($sql);
// 結果処理
while ($row = $result->fetch_assoc()) {
echo $row['id'] . ' ' . $row['name'] . '<br>';
}
// データベース接続解除
$mysqli->close();
?>
ポイント
- データベース接続情報は、ご自身の環境に合わせて変更してください。
- クエリ実行と結果処理は、目的に合わせて変更してください。
その他の接続方法
PDOは、PHP Data Objectsの略で、データベースにアクセスするための統一されたインターフェースを提供します。PDOは、MySQLだけでなく、様々なデータベースに対応しています。
<?php
// データベース接続情報
$host = 'localhost';
$dbname = 'test';
$username = 'root';
$password = 'password';
// データベース接続
$pdo = new PDO('mysql:host=' . $host . ';dbname=' . $dbname, $username, $password);
// クエリ実行
$sql = 'SELECT * FROM users';
$stmt = $pdo->query($sql);
// 結果処理
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo $row['id'] . ' ' . $row['name'] . '<br>';
}
// データベース接続解除
$pdo = null;
?>
mysqlndは、MySQL用のネイティブドライバーです。mysqliよりも高速で、より多くの機能を提供します。
<?php
// データベース接続情報
$host = 'localhost';
$dbname = 'test';
$username = 'root';
$password = 'password';
// データベース接続
$conn = mysqlnd_connect($host, $username, $password, $dbname);
// クエリ実行
$sql = 'SELECT * FROM users';
$result = mysqlnd_query($conn, $sql);
// 結果処理
while ($row = mysqlnd_fetch_assoc($result)) {
echo $row['id'] . ' ' . $row['name'] . '<br>';
}
// データベース接続解除
mysqlnd_close($conn);
?>
その他のライブラリ
上記以外にも、様々なライブラリを使ってMySQLデータベースに接続できます。
- Doctrine ORM
- Laravel Eloquent
- CakePHP ORM
これらのライブラリは、オブジェクト指向のインターフェースを提供し、データベース操作をより簡単に記述できます。
MySQLデータベースに接続するには、様々な方法があります。それぞれの方法にはメリットとデメリットがあるので、ご自身の環境や目的に合わせて最適な方法を選択してください。
php mysql database