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

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

More than 5 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"
  }
]
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした