Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

前提

・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

wjtnk
Ruby,PHP,Go,Docker,AWS
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away