为什么FLASH不可以直接访问数据库,为何FLASH一定要通过后台语言才可以访问数据库?
其实,很久以前就有一个老外写过一个类,只要简单配置一下,然后就可以连接数据库了,完全不需要通过ASP,ASP.NET,PHP,JSP等过渡了.可是如果你在现实应用中,真的这样做了,那么等于你已经把你的所有数据库信息光明正大的送给别人了~现在的破解,让多少FLASH开发者心寒啊!把所有的数据库信息都写在AS里面,那你自己想想,后果会多严重~所以通过后台语言的过渡,还是很有必要的.
所以对于初学者,以后还是不要再问这个问题了,不是技术达不到,也不是adobe没有这个能力,其实完全在于一个安全角的考虑.
MXML:
<mx:Script>
<![CDATA[
private function callService(sql:String):void
{
sqlService.send(sql);
}
]]>
</mx:Script>
<sql:MysqlService id="sqlService"
host="database.mydomain.com"
port="3306"
user="username"
scrambler="{new PlainTextScrambler('password')}"
database="databaseName"
response="onResponse(event)"
error="onError(event)" />
<mx:ComboBox id="cbx1" dataProvider="{sqlService.lastResult}" labelField="userName" />
Straight Actionscript:
private function getUserList():void
{
var host:String = "database.mydomain.com";
var port:int = 3306;
var user:String = "mydatabaseuser";
var scrambler:PlainTextScrambler = new PlainTextScrambler("password");
var database:String = "databaseName";
var con:Connection = new Connection(host, post, user, scrambler, database);
con.addEventListener(Event.CONNECT, onConnect);
con.addEventListener(SQLErrorEvent.SQL_ERROR, onError);
con.connect();
}
private function onConnect(e:Event):void
{
var con:Connection = Connection(e.target);
var st:Statement = con.createStatement();
st.addEventListener(RestulsEvent.RESULTS, onResults); //FOR SELECT
st.addEventListener(ResponseEvent.RESPONSE, onResponse); //FOR INSERT, UPDATE, etc.
st.addEventListener(SQLErrorEvent.SQL_ERROR, onError);
st.executeQuery("SELECT * FROM users;");
}
private function onResults(e:ResultsEvent):void
{
var st:Statement = Statement(e.target);
var con:Connection = st.getConnection();
var rs:ResultSet = e.resultSet;
while ( rs.next() )
{
var userName = rs.getString("userName");
var email = rs.getString(2);
}
con.disconnect();
}
private function onResponse(e:ResponseEvent):void
{
var st:Statement = Statement(e.target);
var con:Connection = st.getConnection();
var affectedRows:int = e.affectedRows;
var insertID:int = e.insertID;
con.disconnect();
}
private function onError(e:SQLErrorEvent):void
{
var st:Statement = Statement(e.target);
var con:Connection = st.getConnection();
var message:String = e.msg;
var errorNo:int = e.id;
var text:String = e.text; // Equals SQLError #{id}: {msg}
con.disconnect();
}