CentOS環境のPHPでPDOを使ってMySQLからJSONでデータ取得する方法を確認しました。
1)実行環境の確認
・CentOS6.5
・PHP5.3.3-27
2)PDOの設定
①pdo_mysqlのモジュールがインストール済みか確認
$ php -m | grep pdo_mysql
pdo_mysql
※このモジュールは、php-mysqlのRPMパッケージに含まれています。
$ rpm -ql php-mysql
/etc/php.d/mysql.ini
/etc/php.d/mysqli.ini
/etc/php.d/pdo_mysql.ini
/usr/lib64/php/modules/mysql.so
/usr/lib64/php/modules/mysqli.so
/usr/lib64/php/modules/pdo_mysql.so
②pdo_mysqlのモジュールを設定ファイルで有効にする
$ vi /etc/php.d/pdo_mysql.ini
; Enable pdo_mysql extension module
extension=pdo_mysql.so
③設定変更後、Apacheを再起動
3)データベーステーブル情報ファイル作成
MySQLデータベースのテーブルに接続するのに必要なユーザー名、パスワード、データベース名を記述したファイルを作成します。
$ vi dbinfo.php
<?php
$username=”MySQLユーザー名”;
$password=”パスワード”;
$database=”データベース名”;
?>
4)MySQLからデータを取得してJSONで出力するPHPスクリプト作成
<?php require("dbinfo.php"); $dsn = 'mysql:host=localhost;dbname='.$database.';charset=utf8'; try { $dbh = new PDO($dsn, $username, $password,array(PDO::ATTR_EMULATE_PREPARES => false,PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET `utf8`")); } catch (PDOException $e) { exit('データベース接続失敗。'.$e->getMessage()); } $st = $dbh->query("SELECT * FROM table_name WHERE 1"); echo json_encode($st->fetchAll(PDO::FETCH_ASSOC)); ?>
①PDO::FETCH_ASSOCとPDO::FETCH_BOTHについて
http://www.php.net/manual/ja/pdostatement.fetch.php
・PDO::FETCH_ASSOC
結果セットに 返された際のカラム名で添字を付けた配列を返します。
・PDO::FETCH_BOTH (デフォルト)
結果セットに返された際のカラム名と 0 で始まるカラム番号で添字を付けた配列を返します。
②文字コードの指定
PHP5.3.6以前では、’mysql:host=localhost;dbname=’.$database.’;charset=utf8’で指定した文字コードの設定が無視されるので、PDO::MYSQL_ATTR_INIT_COMMANDを使って明示的に文字コードを設定しています。
※PDO::MYSQL_ATTR_INIT_COMMAND
http://php.net/manual/ja/ref.pdo-mysql.php
・MySQL サーバーへの接続時に実行するコマンドを指定。 再接続の際には自動的に再実行されまる。
・この定数を使うのは、新しいデータベースハンドルを作るときの driver_options 配列内だけであることに注意。
③JSON形式で出力
日本語を含むデータの場合は、下記記事参照
PHPでディレクトリ内のファイル一覧をJSONで出力