VPSサーバーでWebサイト公開 備忘録 ~Linux、MySQLからAJAXまで

CentOS環境のPHPでPDOを使ってMySQLからJSONでデータ取得

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で出力

モバイルバージョンを終了