FLEX on PHP , ZendAMF with ZendDB (XAMPP的逆襲)
標題很聳動,到底發生了甚麼事情呢,上一篇 FLEX on PHP , ZendAMF 中文 UTF-8 測試報告 我們提到,MySQLi 的 Result 物件不可以直接丟給 FLEX 了,這樣實在是很麻煩,每次都要寫個迴圈在那邊轉,不然就是得自己寫個 Function 在那邊轉陣列了,這樣感覺似乎不是很聰明,翻一下 ZEND FRAMEWORK 裡面有一隻 ZEND DB 的 LIBRARY ,來看看他有甚麼能耐吧。
圖片 : 使用 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 程式看看結果如何。
吼~~~~ 這什麼東西阿 ! 施展大絕招了嗎 ?
原來,上次在測試 PHP 的 PDO 物件也是遇過 XAMPP 在 PDO 上有點問題,無法正確執行,上次光光寫 PHP 檔案測試就跑半天不吐答案,這次掛上 ZEND DB 的加持,直接就跳錯誤視窗了。
解決方式 : 所謂的解決方式就是沒有解決方式,因為我已經嘗試過去 www.php.net 下載最新的 PHP PDO 物件 DLL 放入資料夾中,很可惜的並不奏效,因此我只好另外去下載 Aphache 以及 PHP 來我的電腦安裝,打造一個最純粹的執行環境,至於步驟我就不說了,網路上一定找的到更多教學。
重新安裝後我們重新部署 FLEX 資料夾,並且重新執行看看結果。
圖片 : 經由 ZEND DB 處理過後的 Result 看來還是只丟出一個空的 Object
唉~ 真是長嘆三聲,沒想到丟回來的又是一樣的結果,不過還好,ZEND DB 還多提供我們一個方法。
1 | return $result->fetchAll(); |
這個方法可以讓我們一次把所有的資料列回傳成為陣列,並且傳回到 FLEX ,我們再重新修改一次看看結果吧。
太好了,資料依序排排站,終於是我們要的資料了,趕快看看程式的執行結果吧。
大功告成,看看實際執行的範例吧。
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…
相關文章 :










看來Zend php好像真的很好用~~
好像Flex的感覺~~
改天找時間來來玩一下~~
一直還沒去抓來玩~~
@梅干扣肉
等碰到資料庫的時候就得用到囉!~
呵呵~
我執行您的示範程式時出現問題.是否設定上有甚麼問題呢?
錯誤如下:
@shilik
錯誤訊息內沒看甚麼代碼耶~~
@@”
你的 SERVER 適用 XAMPP 嗎?
我的情況跟shilik一樣耶
我是用appserv來架的
資料表我也創一個新的bloglink了~可能會是資料庫的問題嗎?
希望能給我一個方向來解決這個問題摟~~感謝!!!
@seal
看錯誤訊息好像是沒有得到 remoting 的資料頁~
可能是 zendamf 沒設定好