Neste artigo estarei dando um pequeno exemplo de como você pode fazer uma integração de Flex, PHP e SQlite. Este exemplo é apenas um ponto de partida para você explorar sua criatividade e adentrar nos conceito mais avançados.

Fiz o possível para trabalhar com o código de um forma simples para facilitar o entendimento. Bom chega de papo furado e mãos a obra. O Flex 4 basta uma pequena busca no google e você já consegue baixar, já o PHP e SQlite acho que esse link pode ajudar, um pouco antigo mas te dá o caminho das pedras. Um “pouquinho” de esforço não mata ninguém.

Depois de criar um novo projeto WEB no Flash Builder 4. Você terá o seguinte código.

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
			   xmlns:s="library://ns.adobe.com/flex/spark"
			   xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
	<fx:Declarations>
		<!-- Place non-visual elements (e.g., services, value objects) here -->
	</fx:Declarations>
</s:Application>

Agora vamos adicionar um mx:HTTPService dentro de fx:Declarations. Agora nosso código cresceu um pouco e ficou assim.

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
			   xmlns:s="library://ns.adobe.com/flex/spark"
			   xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">

	<fx:Declarations>
		<mx:HTTPService id="ControllerUsers" result="ControllerUsersResult(event)" useProxy="false" resultFormat="text" method="POST" />
	</fx:Declarations>

</s:Application>

É importante que você adicione um id, result no mx:HTTPService conforme o código acima. Ao salvar irá aparecer um erro, mas não se preocupe com ele. Logo está erro irá virar história.

Adicione agora uma tag fx:Script dentro de s:Application onde iremos trabalhar nossas ações. Em fx:Script vamos adicionar alguns funções. ControllerUsersResult essa função irá capturar o resultado do mx:HTTPService e a outra função será InitSystem. Está irá apenas executar algumas ações ao carregar nossa aplicação. Iremos também adicionar duas variáveis e uma delas será Bindable. Vou explicar tudo isso em seguida, mas antes vamos ver como nosso código ficou.

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
			   creationComplete="InitSystem()"
			   xmlns:s="library://ns.adobe.com/flex/spark"
			   xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">

	<fx:Declarations>
		<mx:HTTPService id="ControllerUsers" result="ControllerUsersResult(event)" useProxy="false" resultFormat="text" method="POST" />
	</fx:Declarations>

	<fx:Script>
		<![CDATA[
			import com.adobe.serialization.json.JSON;
			import mx.rpc.events.ResultEvent;

			[Bindable]
			public var Users:Array;	

			public var UrlController:String = "http://varaldebits.com.br/sample/flex-php-sqlite/controller.php";

			private function InitSystem():void {
				ControllerUsers.url = UrlController;
				ControllerUsers.send();
			}

			private function ControllerUsersResult(event:ResultEvent):void {
				Users = JSON.decode(String(event.result)) as Array;
			}

		]]>
	</fx:Script>

</s:Application>

Resolvemos aquele erro, não foi? Mas agora apareceu outro erro. Este erro é porque precisamos adicionar dentro da pasta libs o arquivo “corelib.swc“. Estou utilizando JSON para capturar os dados que o PHP irá retornar.  Adicione o arquivo na pasta libs e aguarde alguns segundos e… este erro também virou história.

Conforme prometido, vamos agora explicar o código.

Primeiro porque a variável Users é [Bindable] e a UrlController não? A variável Users nós iremos utilizá-la fora da tag fx:Script em um outro componente, que iremos criar ainda já a variável UrlController iremos apenas utilizá-la dentro da tag tag fx:Script.

Na função InitSystem iremos apenas adicionar uma url em nosso mx:HTTPService e enviá-lo. Você precisa adicionar esse função na tag s:Application como creationComplete. Simples assim. Já na função ControllerUsersResult iremos capturar o resultado que foi retornado pelo PHP em formato JSON (iremos ver isto ainda) e converte-lo a um Array adicionando-o dentro da variável Users. Simples assim também.

Tendo explicado isso vamos exibir o Array. Você pode utilizar vários componentes. Neste caso irei utilizar um mx:DataGrid. Logo após a tag fx:Script adicione o seguinte código.

<mx:DataGrid y="10" x="10" dataProvider="{Users}" height="250" width="580" id="DataGridUsers">
	<mx:columns>
		<mx:DataGridColumn dataField="username" headerText="Nome do Usuário" />
		<mx:DataGridColumn dataField="email" headerText="Email" />
	</mx:columns>
</mx:DataGrid>

Repare que na tag mx:DataGrid temos o parametro dataProvider com a nossa variável Users. Por isso foi necessário colocá-lo como [Bindable].

Bom com tudo isso a parte do Flex está pronta. Agora vamos para o PHP.

<?php

  $kind = isset($_GET["kind"]) ? $_GET["kind"] : "";

  switch ($kind) {
    case "SQLiteDatabase":
          $query = "SELECT * FROM users ORDER BY ID";
          $database = "sampleWebOthers.db3";
          $db = new SQLiteDatabase($database, 0666);
          $results = $db->query($query)->fetchAll();
        break;
    case "sqlite_open":
          $query = "SELECT * FROM users ORDER BY ID DESC";
          $database = "sampleWebOthers.db3";
          $db = sqlite_open($database, 0666, $error);
          $results = sqlite_array_query($db, $query, SQLITE_ASSOC);
        break;
    default:
        $query = "SELECT * FROM users ORDER BY RANDOM()";
        $database = "sampleWebPDO.db3";
        $dbh = new PDO("sqlite:$database");
        $sth = $dbh->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
        $sth->execute();
        $results = $sth->fetchAll();
  }

  echo json_encode($results);

?>

Você precisa de tudo isso para que funcione? A resposta é não. Eu fiz desta maneira porque já tive vários problemas com formatos de banco de dados. Alguns bancos de dados só abrem utilizando PDO outro apenas com sqlite_open e outros ainda com SQLiteDatabase, então segue os 3 exemplos para você. Descobrindo o que funciona para você, utilize apenas o que está dentro do case.

// Apenas o SQLiteDatabase":
$query = "SELECT * FROM users ORDER BY username";
$database = "sampleWebOthers.db3";
$db = new SQLiteDatabase($database, 0666);
$results = $db->query($query)->fetchAll();

// Apenas o sqlite_open
$query = "SELECT * FROM users ORDER BY username";
$database = "sampleWebOthers.db3";
$db = sqlite_open($database, 0666, $error);
$results = sqlite_array_query($db, $query, SQLITE_ASSOC);

// Apenas o PDO
$query = "SELECT * FROM users ORDER BY username";
$database = "sampleWebPDO.db3";
$dbh = new PDO("sqlite:$database");
$sth = $dbh->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$sth->execute();
$results = $sth->fetchAll();

Configurado da sua maneira. retorne o resultado como JSON.

echo json_encode($results);

Segue aqui para download e o exemplo online. Adicionei algumas coisa simplesmente para testes.

Download corelib.swc | Exemplo Online | Código Fonte