広告

【MAMP】PHPでMySQLに接続する方法。超ハマったポイントも

2019年9月16日

MAMPでPHPを使ってMySQLに接続する方法を記してます。

【MAMP】PHPでMySQLに接続する方法のGIF

MAMPでPHPからMySQLに接続するにはPDO使う

MAMPでPHPからMySQLに接続するには、PDOオブジェクトを利用します。

PDOとは「PHP Data Objects」の略称で、PHP5.1から標準で利用できるようになったオブジェクトです。

すぐにPDOのサンプルコードを見る↓

注意!

以前は「mysql_connect」がPHP→MySQL接続に利用されていましたが、PHP7.0.0で削除されました。

参考:mysql_connect

将来データベースが代わって接続先が変更となっても、PDOで指定するパラメーターの変更を行うだけで接続可能になる便利なオブジェクトみたい。

今回はphpMyAdminにあらかじめ作成しておいた、以下データベース(mydb)に接続していきます!

接続先となるphpadmin内のデータベース画像mydb

PHPでMySQLに接続するPDOオブジェクトの記述方法

PDOの記述例は以下のとおりです。

<?php
$db = new PDO('mysql:dbname=mytable;host=localhost;,$user,$pass);
?>

参考:接続、および接続の管理

基本的に、

  1. dbname=接続先のデータベース名
  2. host=loaclhost
  3. $user
  4. $pass

上記の各パラメーターの指定は必須です。

接続時エラーになる考えられるポイント2つ↓

MySQL接続時のエラー処理も同時に設定しておく

PHPからMySQLへ接続する際に、PDOのパラメーターの指定が間違っていると例外となるエラーが表示され、ユーザーIDやパスワードがバレてしまうことも想定されます。

エラー結果の画像

そのためPDOにてMySQL接続を行う際は暗黙的に、try catchブロック」などでエラーを処理の中でキャッチする指定を行います。

PHPでMySQLに接続するPDOの書き方サンプル

PHPからMySQL接続をPDOを使って、エラー時の例外処理を加えて書いてみました。

phpMyAdmin内に用意した、「mydb」というデータベースに接続してみます。

<?php
try {
$db = new PDO('mysql:dbname=mydb;host=localhost;charset=utf8','root','root');
echo "接続OK!";
} catch (PDOException $e) {
echo 'DB接続エラー!: ' . $e->getMessage();
}
?>

接続が上手くいっていれば「接続OK!」という処理が表示されます。

PHPでMySQLに接続が成功した画面

補足

上記結果が記されるように、index.phpにhtmlを記述しています。

<title>PHP</title>
</head>
<body>
<header>
<h1 class="font-weight-normal">PHP</h1>
</header>
<main>
<h2>Practice</h2>
<pre>
<?php
try {
$db = new PDO('mysql:dbname=mydb;host=localhost;charset=utf8','root','root');
echo "接続OK!";
} catch (PDOException $e) {
echo 'DB接続エラー!: ' . $e->getMessage();
}
?>
</pre>
</main>
</body>

PDOで接続が上手くいかないときに考えられること2つ

先のとおりに実行すればPHPからMySQLへの接続は上手くいくと思いますが、自分でも接続できなくてハマったポイントが2つありました

  1. hostに127.0.0.1を設定している
  2. $passのパスワードを入力してない

ちょっとハマったところを説明します。

1. hostに127.0.0.1を設定している

127.0.0.1」とは、IPアドレスで自分自身を意味するIPアドレス(ループバックアドレス)です。

僕は環境がMacなのですが以下のように書いても...

$db = new PDO('mysql:dbname=mydb;host=127.0.0.1;charset=utf8','root','root');

MySQLに接続できませんでした。

DB接続エラー!: SQLSTATE[HY000] [2002] Connection refused

PHPのMySQL接続を参考にしている資料によっては、ループバックアドレスによる接続方法を紹介しているため、ハマってしまうかも。

正解のソースを見る↑

2. $passのパスワードを入力してない

以下構文の「$pass」の部分を設定せず、

$db = new PDO('mysql:dbname=mytable;host=localhost;,$user,$pass);

空白にして接続を実行してみるとMAMP環境では...

$db = new PDO('mysql:dbname=mydb;host=localhost;charset=utf8','root','');

接続エラーとなってしまいました。

DB接続エラー!: SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: NO)

MAMPを利用しているときは、$user・$passに'root'を設定してあげることでひとまず解決しました。

正解のソースを見る↑

まとめ

PHPでMySQLにPDOを使って接続する方法を紹介しました。

PDOの接続のところで、特に「ループバックアドレス」を設定するときに、PCの環境によってはハマってしまう人もいるかもです。

OYAKUN
OYAKUN
次回はPHPからMySQLへデータ追加する方法を紹介していきます!
次回記事
MySql-php-data-add
【MAMP】PHPでMySQLにデータを追加する方法(phpMyAdmin)

MAMPのMySQLにPHPからデータを追加する方法を記してます。 補足 PHPでMySQLに接続する方法について理解し ...

続きを見る

関連記事:【phpMyAdmin】データのエクスポートをCSVで行う方法
関連記事:【MySQL】LIMIT句の使い方。データ取得の上限を指定する方法
関連記事:【MySQL】WHERE・AND・ORを使ったデータ検索の方法(phpMyAdmin)