FlexとPHPでmysqlからデータの読み出し

前からやってみたかったFlexPHPの連携をやってみました。


こんな感じ


連携の流れ
FlexからPHPへリクエストを出す。
リクエストに応じてPHP側でデータベースへ接続してデータを取り出す。
Flexへ返すデータをxmlにする。
Flexxmlを読み込んで表示。


Flex

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="init()">
        urlにPHPファイルを指定。
	<mx:HTTPService id="service" url="./Flex_PHP2.php" resultFormat="e4x" useProxy="false" method="GET"/>
	<mx:DataGrid id="listGrid" x="10" y="63" width="741" height="553" dataProvider="{service.lastResult..item}">
    <mx:columns>
        <mx:DataGridColumn headerText="ID" dataField="id" />
        <mx:DataGridColumn headerText="タイトル" dataField="title"/>
        <mx:DataGridColumn headerText="作者" dataField="author"/>
        <mx:DataGridColumn headerText="値段" dataField="price"/>
    </mx:columns>
</mx:DataGrid>
	<mx:Script>
		<![CDATA[
			private function init():void{
                                //パラメータで文字列を渡している。全件検索
                //こんな感じに書くとPHP側で$_GET["type"]で"SELECT_ALL"が取得できる。
				service.send({type:"SELECT_ALL"});
			}
			
			private function select():void{
                //上とは違う書き方が違うだけ
                                //$_GET["type"]で"SELECT"、$_GET["id"]でsearch_id.valueが取得できる
				service.request.type = "SELECT";
				service.request.id = search_id.value;
				service.send();
			}
		]]>
	</mx:Script>
	<mx:TextArea x="10" y="12" width="58" text="ID検索&#xa;" height="25" editable="false" borderThickness="0" backgroundAlpha="0"/>
	<mx:Button x="123" y="10" label="全表示" height="45" click="init()"/>
	<mx:NumericStepper x="57" y="10" minimum="1" value="1" id="search_id" stepSize="1" change="select()"/>
</mx:Application>


PHP

ここでは主にデータベース接続とXMLの生成

<?php
	require_once './Serializer.php';

	$db_host="サーバ名";

	$db_user="ユーザー名";

	$db_passwd = "パスワード";

	$db = mysql_connect($db_host,$db_user,$db_passwd);

	$db_name = "データベース名";

	mysql_select_db($db_name,$db);

	$options = array(
                 "indent"         => " ",
                 "linebreak"      => "\n",
                 "typeHints"      => false,
                 "addDecl"        => true,
                 "encoding"       => "UTF-8",
                 "rootName"       => "result",
                 "defaultTagName" => "item",
                 );
	$serializer = new XML_Serializer($options);

	if($_GET["type"] == "SELECT_ALL"){
		$sql = "SELECT * FROM books;";
	}

	else if($_GET["type"] == "SELECT"){
		$sql = "SELECT * FROM books WHERE id =".$_GET["id"].";";
	}

	$result = mysql_query( $sql );
	$valArr = array();
	while( $val = mysql_fetch_assoc( $result ) ){
	    $valArr[] = $val;
	 }
	$status = $serializer->serialize($valArr);
	if( $status === true ) {
	    $xml = $serializer->getSerializedData();
	    header ("Content-Type: text/xml; charset=UTF-8");
	    echo $xml;
	    exit;
	}
	exit;
?>


参考記事
PHPでXMLを簡単に出力する方法 - PHP,MySQL,Flex,JSな日々+イラストとか
PHP+FlexでCRUD【その1】 | フリップフラップ