Posted at

【PHP】MySQLに保存しているデータをJSONで吐き出す

More than 3 years have passed since last update.


はじめに

iPhoneアプリを作成する際にJSONでデータのやり取りをしようと思っていてWeb上で方法を探していたのですが、情報が古く、PHP5.5.0では非推奨になっている情報しか手に入りませんでした。そこで、現在では非推奨になってはいるものの参考になるサイトを利用してMySQLに保存しているデータをJSONで吐き出せるようにPHPで作ってみました。


参考にした記事

上記のサイトは2012.01.12に記述された記事で、記述されていた内容は現在非推奨になっています。

ただし、ほとんどはこちらのサイトの情報をPHP5.5.0に対応できるように変更しただけです。


サンプルコード

下記に示してる設定ファイル、ファンクション管理ファイル、JSONを吐き出すファイルは今回のために作ったもので、実際に渡しが利用する場合はもう少しセキュリティについて考えて作っていますが、今回は簡易なサンプルとして公開しています。なので、実際に今回のサンプルコードを利用して作成される場合は暗号化などの対策等を自身で施してください。

(*今回のサンプルコードを利用したことによって何らかの損害が出たとしても私は一切の責任を負えないのをご了承の上ご利用ください。)


今回は以下の様なデーターベースが存在していたと仮定して説明していきます。

サーバー名:mysql000.example.jp

データーベース名:_example

ユーザー名:_example

データーベースへのパスワード:testpassword

テーブル名:userInfo


『userInfo』内のカラム

|user_id|user_name|user_age|user_sex|


『userInfo』内のデータの中身

|user_id|user_name|user_age|user_sex|

|1|sato teru|20|man|

|2|maeda teruko|23|woman|


設定ファイル


config.php

<?php

define('DSN','mysql:host=mysql000.example.jp;dbname=_example');
define('DB_USER','_example');
define('DB_PASSWORD','testpassword');
error_reporting(E_ALL & ~E_NOTICE);

【変更が必要な点】


  • mysql000.example.jp:サーバ名なので自身のサーバ名に変更してください。

  • _example:DSNに定義している"_example"はデーターベース名、DB_USERに定義している"_example"はユーザー名なのでそれぞれ自身のデーターベース名およびユーザー名に変更してください。

  • testpassword:データーベースにアクセスする際のパスワードなので自身で設定しているパスワードに変更してください。


ファンクション管理ファイル


functions.php

<?php

function connectDb() {
try {
return new PDO(DSN, DB_USER, DB_PASSWORD);
} catch (PDOException $e) {
echo $e->getMessage();
exit;
}
}


【変更が必要な点】

こちらのファイルでは特に変更すべき点はありません。


JSONを吐き出すファイル


json.php

<?php

require_once('config.php');
require_once('functions.php');

mb_language("uni");
mb_internal_encoding("utf-8"); //内部文字コードを変更
mb_http_input("auto");
mb_http_output("utf-8");

$dbh = connectDb();

$sth = $dbh->prepare("SELECT * FROM userInfo");
$sth->execute();

$userData = array();

while($row = $sth->fetch(PDO::FETCH_ASSOC)){
$userData[]=array(
'id'=>$row['user_id'],
'name'=>$row['user_name'],
'age'=>$row['user_age'],
'sex'=>$row['user_sex']
);
}

//jsonとして出力
header('Content-type: application/json');
echo json_encode($userData);


【変更が必要な点】

userInfo:テーブル名です。自身のconfig.phpで指定したデーターベース内で取得したいテーブル名に変更してください。

userData:関数名ですが、jsonで吐き出すものの意味にそうものに変更したほうが後々いいと思いますので、ご自身の判断で変更してください。

user_id、user_name、user_age、user_sex:これらは指定したテーブル内にあるカラムなので自身のテーブル内にある取得したいカラムに変更してください。



出力結果のサンプル

[

{
"id": "1",
"name": "sato teru",
"age": "20"
"sex": "man"
},
{
"id": "2",
"name": "maeda teruko",
"age": "23"
"sex": "woman"
}
]