首頁 > FLEX, PHP, 程式設計, 網頁設計 > FLEX on PHP , ZendAMF with ZendDB (XAMPP的逆襲)

FLEX on PHP , ZendAMF with ZendDB (XAMPP的逆襲)

2009年3月16日  瀏覽次數 : 3,543

標題很聳動,到底發生了甚麼事情呢,上一篇 FLEX on PHP , ZendAMF 中文 UTF-8 測試報告 我們提到,MySQLi 的 Result 物件不可以直接丟給 FLEX 了,這樣實在是很麻煩,每次都要寫個迴圈在那邊轉,不然就是得自己寫個 Function 在那邊轉陣列了,這樣感覺似乎不是很聰明,翻一下 ZEND FRAMEWORK 裡面有一隻 ZEND DB 的 LIBRARY ,來看看他有甚麼能耐吧。

image 圖片 : 使用 Zend Studio 來開發 PHP , 可以節省你的開發時間以及錯誤機率

我們很簡單的把上一篇的 CLASS 增加一個方法

1
2
3
4
5
6
7
8
9
10
11
12
13
	public function getDBbyZendDB(){
		$params = array ('host' => dbserver,
                 'username' => dbusername,
                 'password' => dbpassword,
                 'dbname'   => dbname);
		$db = Zend_Db::factory('PDO_MYSQL', $params);
		$db->query ( "SET NAMES 'utf8'" );
		$sql = "select *
            from bloglink";
		$result = $db->query($sql);
 
		return $result;
	}

然後重新執行我們的 FLEX 程式看看結果如何。

image

吼~~~~ 這什麼東西阿 ! 施展大絕招了嗎 ?

原來,上次在測試 PHP 的 PDO 物件也是遇過 XAMPP 在 PDO 上有點問題,無法正確執行,上次光光寫 PHP 檔案測試就跑半天不吐答案,這次掛上 ZEND DB 的加持,直接就跳錯誤視窗了。

解決方式 : 所謂的解決方式就是沒有解決方式,因為我已經嘗試過去 www.php.net 下載最新的 PHP PDO 物件 DLL 放入資料夾中,很可惜的並不奏效,因此我只好另外去下載 Aphache 以及 PHP 來我的電腦安裝,打造一個最純粹的執行環境,至於步驟我就不說了,網路上一定找的到更多教學。

重新安裝後我們重新部署 FLEX 資料夾,並且重新執行看看結果。

image 圖片 : 經由 ZEND DB 處理過後的 Result 看來還是只丟出一個空的 Object

唉~ 真是長嘆三聲,沒想到丟回來的又是一樣的結果,不過還好,ZEND DB 還多提供我們一個方法。

1
	return $result->fetchAll();

這個方法可以讓我們一次把所有的資料列回傳成為陣列,並且傳回到 FLEX ,我們再重新修改一次看看結果吧。

image 

太好了,資料依序排排站,終於是我們要的資料了,趕快看看程式的執行結果吧。

image

大功告成,看看實際執行的範例吧。

gateway.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
//Basic Config
error_reporting(E_ALL | E_STRICT);  //設定Error Report的等級
date_default_timezone_set('Asia/Taipei');  //設定時區為台北
//Include path
//比較需要注意的是這邊新增了一個 library 的 PATH 路徑,用來供 ZFAMF 的資料互相存取
define ('P_S', PATH_SEPARATOR);
set_include_path('.' .P_S .'library' .P_S .'../application/models/' .P_S .get_include_path());
//載入 ZFAMF 類別檔
require_once 'library/Zend/Amf/Server.php';
//載入我們的 HELLOW 類別檔
require_once 'hellow.php';
//建立 ZENDAMF SERVER
$server = new Zend_Amf_Server();
//著名我們這裡面有一個 CLASS 叫做 HELLOW
$server->setClass("hellow");
//執行結果
echo( $server -> handle() );
?>

hellow.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php
define("dbserver","localhost");
define("dbusername","root");
define("dbpassword","");
define("dbname","db_test");
 
//比較需要注意的是這邊新增了一個 library 的 PATH 路徑,用來供 ZFAMF 的資料互相存取
//define ('P_S', PATH_SEPARATOR);
//set_include_path('.' .P_S .'library' .P_S .'../application/models/' .P_S .get_include_path());
 
require_once 'library/Zend/Db.php';
 
class hellow {
	public  function sayHello($name){
		//甚麼都不做,就回傳字串
		return "中文測試 : ".$name;
	}
	public function getDbData(){
		$db = new mysqli ( dbserver, dbusername, dbpassword, dbname );
		$db->query ( "SET NAMES 'utf8'" );
		$query = "select *
            from bloglink";
		$result = $db->query ( $query );
		$db->close();
		//將讀取出的資料放入陣列中
		for($i=0;$i<$result->num_rows;$i++){
			$test[$i] = $result->fetch_assoc();
		}
		//回傳陣列
		return $test;
	}
	public function getDbDataResult(){
		$db = new mysqli ( dbserver, dbusername, dbpassword, dbname );
		$db->query ( "SET NAMES 'utf8'" );
		$query = "select *
            from bloglink";
		$result = $db->query ( $query );
		$db->close();
		//直接回傳 MYSQL 的 RESULT 物件
		return $result;
	}
	public function getDBbyZendDB(){
		$params = array ('host' => dbserver,
                 'username' => dbusername,
                 'password' => dbpassword,
                 'dbname'   => dbname);
		$db = Zend_Db::factory('PDO_MYSQL', $params);
		$db->query ( "SET NAMES 'utf8'" );
		$sql = "select *
            from bloglink";
		$result = $db->query($sql);
 
		return $result->fetchAll();
	}
}
?>

ZendAMF2.mxml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" fontSize="16">
	<mx:Script>
		<![CDATA[
			import flash.net.navigateToURL;
			import mx.collections.ArrayCollection;
			import mx.rpc.events.ResultEvent;
			private function getZendAMF():void{
				this.ro.sayHello("中文傳值 許功蓋");
			}
			private function getZendAMFDB():void{
				//this.ro.getDbData();
				//this.ro.getDbDataResult();
				this.ro.getDBbyZendDB();
			}
			private function resultHandler(event:ResultEvent):void{
				//this.ZendResult.dataProvider = event;
 
			}
			private function clickHandler():void{
				var url:String = this.bloglink.selectedItem.m_url;
				var req:URLRequest = new URLRequest(url);
				navigateToURL(req,"_blank");
			}
			private function test(event:ResultEvent):void{
 
			}
		]]>
	</mx:Script>
	<mx:TextInput text="{this.ro.sayHello.lastResult}"/>
	<mx:Button label="按下後使用 RemoteObject 取回 ZendAMF 後端資料" click="getZendAMF()"/>
	<mx:DataGrid id="bloglink" dataProvider="{this.ro.getDBbyZendDB.lastResult}" width="600" height="250" itemClick="clickHandler()">
		<mx:columns>
			<mx:DataGridColumn headerText="標題" dataField="m_title"/>
			<mx:DataGridColumn headerText="日期" dataField="m_date" width="150"/>
		</mx:columns>
	</mx:DataGrid>
	<mx:Button label="使用 ZENDAMF 取得資料庫的資料" click="getZendAMFDB()"/>
	<mx:RemoteObject id="ro" destination="zend" source="hellow">
		<mx:method name="getDbDataResult" result="resultHandler(event)"/>
		<mx:method name="getDBbyZendDB" result="test(event)"/>
	</mx:RemoteObject>
</mx:Application>

Random Posts

Loading…

:: 把這篇好文推到書籤網站與更多人分享吧 ::
  • funp
  • Hemidemi
  • YahooKimo
  • Google
  • udn
  • Haohao
  • Live

相關文章 :

Ausir FLEX, PHP, 程式設計, 網頁設計 , , , , , ,

  1. 2009年3月16日19:59 | #1

    看來Zend php好像真的很好用~~
    好像Flex的感覺~~
    改天找時間來來玩一下~~
    一直還沒去抓來玩~~

  2. 2009年3月16日20:03 | #2

    @梅干扣肉

    等碰到資料庫的時候就得用到囉!~

    呵呵~

  3. shilik
    2009年5月24日14:47 | #3

    我執行您的示範程式時出現問題.是否設定上有甚麼問題呢?

    錯誤如下:

    1
    2
    3
    4
    5
    6
    
    [RPC Fault faultString="" faultCode="0" faultDetail=""]
    	at mx.rpc::AbstractInvoker/http://www.adobe.com/2006/flex/mx/internal::faultHandler()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\rpc\AbstractInvoker.as:220]
    	at mx.rpc::Responder/fault()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\rpc\Responder.as:53]
    	at mx.rpc::AsyncRequest/fault()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\rpc\AsyncRequest.as:103]
    	at NetConnectionMessageResponder/statusHandler()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\messaging\channels\NetConnectionChannel.as:569]
    	at mx.messaging::MessageResponder/status()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\messaging\MessageResponder.as:222]
  4. 2009年5月24日14:49 | #4

    @shilik

    錯誤訊息內沒看甚麼代碼耶~~
    @@”

    你的 SERVER 適用 XAMPP 嗎?

  5. seal
    2009年6月22日22:57 | #5

    我的情況跟shilik一樣耶
    我是用appserv來架的
    資料表我也創一個新的bloglink了~可能會是資料庫的問題嗎?
    希望能給我一個方向來解決這個問題摟~~感謝!!!

  6. 2009年6月23日00:09 | #6

    @seal

    看錯誤訊息好像是沒有得到 remoting 的資料頁~
    可能是 zendamf 沒設定好

  1. 本篇文章目前尚無任何 trackbacks 和 pingbacks。