4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

##前提
・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

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?