如何从actionscript创建SQL查询?并呈现所有结果
答案 0 :(得分:7)
您必须调用服务器端脚本(例如php),然后检索该脚本的输出
private var _loader:URLLoader;
private var _request:URLRequest;
private function loadData():void {
_loader = new URLLoader();
_request = new URLRequest("path/to/your/phpscript");
_request.method = URLRequestMethod.POST;
_loader.addEventListener(Event.COMPLETE, onLoadData);
_loader.addEventListener(IOErrorEvent.IO_ERROR, onDataFailedToLoad);
_loader.addEventListener(IOErrorEvent.NETWORK_ERROR, onDataFailedToLoad);
_loader.addEventListener(IOErrorEvent.VERIFY_ERROR, onDataFailedToLoad);
_loader.addEventListener(IOErrorEvent.DISK_ERROR, onDataFailedToLoad);
_loader.load(_request);
}
private function onLoadData(e:Event):void {
trace("onLoadData",e.target.data);
}
private function onDataFailedToLoad(e:IOErrorEvent):void {
trace("onDataFailedToLoad:",e.text);
}
示例php脚本:
<?php
// defining main variables
$dbHost = "localhost";
$dbUser = "root";
$dbPass = "";
$dbName = "test";
$dbTable = "data";
// connecting and selecting database
@mysql_connect($dbHost, $dbUser, $dbPass) or die(mysql_error());
@mysql_select_db($dbName) or die(mysql_error());
// getting data
$data = "";
$res = mysql_query("SELECT * FROM ".$dbTable." ORDER BY id") or die(mysql_error());
while($row = mysql_fetch_object($res)) {
$data .= "nname=".$row->name.", ";
$data .= "city=".$row->city;
}
echo $data;
?>
为了更好的工作流程,我建议调查AMF ......
答案 1 :(得分:3)
我不知道在Flex中工作的JDBC或ODBC是否真正等效。由于Flex / Flash通常是客户端而DB通常是服务器端(共享),因此很可能这并不是真正被尝试提供的东西。一般来说,您使用Java,PHP,C#,ASP .NET,Python,C ++或其他一些服务器端程序来建立与DB的连接并运行查询。与我的问题最接近的问题是:http://help.adobe.com/en_US/as3/dev/WS5b3ccc516d4fbf351e63e3d118676a5497-7fb4.html但是只适用于AIR而不适用于远程SQL连接。我不完全确定编写类似于接口/实现的JDBC来连接到任何给定的DB需要做多少工作我认为部分取决于DBMS记录的程度......我想它是哪种方式做大量工作。
修改强>
好的,所以实际上在某种程度上吃了我的话,显然这有点可行:http://groups.google.com/group/flex_india/browse_thread/thread/d89bb5120fad7369?pli=1
答案 2 :(得分:1)
您 - 实际上 - 不希望从Flex执行SQL查询连接,尤其是在将应用程序分发给用户的情况下。 Flash / Flex应用程序可以很容易地反编译成可读的源代码,如果您的SQL连接字符串在源代码中,那么您将遇到各种安全问题。让Flex使用宁静的Web API到服务器端语言(如PHP,Python,Perl或Node)来为您执行SQL数据处理,这是一个明智的好主意。
即使你的应用程序是内部的,它仍然是一个更好的“纸上”概念,以防止Flex直接操纵数据库。