PHP
mariadb

外部サーバのmariadbにphpで接続する方法


前提

・mariadbサーバーとphpサーバーがあるとする。

・mariadbサーバーにはmariadb(ポート番号3306を開放しておいてください),phpサーバーにはphpがインストールされている

・mariadbサーバーには接続確認のため、任意のテーブルを作成し、データを入れておいてください。


これからやること

mariadbサーバー側はデフォルトで、localhostしか参照できないようになっているので、

許可したいユーザーと接続元サーバの作成をして、

「このサーバー(今回でいうとphpサーバー)のこのユーザーからのアクセスは許可します」という設定が必要。


ユーザーと接続元サーバの作成

まずは許可したいユーザー(username)と接続元サーバ(192.168.10.1)の作成。

パスワードを指定したければ、IDENTIFIED BY "パスワード"で指定してください。

mysql>CREATE USER username@192.168.10.1 IDENTIFIED BY "passwd";


作成できているのかを確認

ちゃんと作成できているのかを確認。以下のコマンドで、作成したuserが出てくればOK。

mysql>SELECT User,Host FROM mysql.user;


権限を付与

mysql>GRANT [権限種別] ON [データベース名].[テーブル名] TO [ユーザ名]@[接続元ホスト];

権限種別は外部記事を参考にしてください。

以下の例は、

「接続元「192.168.10.1」のユーザー名「username」には、testdbというデータベースのtesttableというテーブルに全ての権限(selectとかdeleteとか諸々全部)を与える」

という意味です。

mysql>GRANT ALL ON testdb.testtable TO username@192.168.10.1;


PHPから接続

次にphpのあるサーバー(この例だと、192.168.10.1のはずです。)からpdoを用いて接続します。

phpファイルを作成し、接続を確認しましょう。


pdo.php


<?php
//ここのhostは接続先(mariadbサーバー)を指定.
//dbnameは作成したdb
$dsn = 'mysql:host=192.168.10.31;dbname=testdb';
//許可したいユーザー
$user = 'username';
$password = 'passwd';

try{
$dbh = new PDO($dsn, $user, $password);
$sql = 'select * from staffname';
foreach ($dbh->query($sql) as $row) {
print($row['id'].',');
print($row['name']);
print('<br />');
}
}catch (PDOException $e){
print('Error:'.$e->getMessage());
die();
}

$dbh = null;

?>


ここでinsertしておいたデータが表示され、接続できていることが確認できればOK