MySQL

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

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

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

 補足
PHPでMySQLに接続するデータベースを先にphpmyadmin内に作成しておく必要があります!

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
次回はPHPからMySQLへデータ追加する方法を紹介していきます!

>【phpMyAdmin】データのエクスポートをCSVで行う方法

>【MySQL】LIMIT句の使い方。データ取得の上限を指定する方法

>【MySQL】WHERE・AND・ORを使ったデータ検索の方法(phpMyAdmin)



  • この記事を書いた人
  • 最新記事
oyakun

oyakun

30代半ば♂妻・子3人の5人で日々激戦中。Google app script&VBA初心者が自分の備忘録を兼ねて「スプレッドシート、Excel、WordPress、plugin」の設定等、主にブログやアフィリエイト周辺のtipsを背伸びしながらご紹介しています。

Copyright© OYAKUDACHI.XYZ , 2019 All Rights Reserved.