2010-01-09 3 views
1

J'ai une application flash qui utilise un seul fichier php pour récupérer des enregistrements d'une base de données (en utilisant le framework Zend). Lorsque l'application commence, j'appelle php pour définir une variable de classe, de sorte que toutes les requêtes futures à la base de données utilisent cette variable pour sélectionner les enregistrements en fonction de sa valeur. Voici donc comment la classe commence:Zend PHP Class Rétention variable pour les requêtes mysql

class MyClass 
{ 

    private $animal = ""; 

    public function setAnimal($anim) { 
     $this->animal = $anim; 
     echo($this->animal); //this correctly prints the variable I passed in 
    } 

plus tard, en fonction des commentaires des utilisateurs, je fais un appel à une autre méthode dans cette classe, mais il est comme si la variable classe $ animal a été oublié, car il ne a plus une valeur sur tout accès ultérieur de la classe:

public function getAnimals() 
    { 
     echo('getAnimals: '); 
     echo($this->animal); //this prints nothing - as if it doesn't know what "animal" is 

     $result = mysql_query("SELECT * FROM animals WHERE animal='$this->animal'"); //and therefore this query doesn't work 
     $t = array(); 

     while($row = mysql_fetch_assoc($result)) 
     { 
      array_push($t, $row); 
     } 

     return $t; 
    } 

donc ma question est, comment puis-je obtenir une variable de classe PHP pour persister pour que je puisse le mettre une fois, et je peux accéder à tout moment au cours de la la vie d'une application?

Répondre

2

Je pourrais mal interpréter votre question, mais il semble que vous appeliez d'abord un script PHP depuis votre Flash, et plus tard vous faites un second appel au script PHP depuis le Flash et attendez une certaine variable à régler?

Si c'est le cas, alors c'est aussi le problème. PHP est sans état. Chaque fois que vous accédez à un script PHP (c'est-à-dire, demandez l'URL), l'environnement PHP est recréé à partir de rien. Dès que la requête est terminée et que l'exécution du script PHP est terminée, l'environnement est détruit (le thread du serveur web s'arrête et l'environnement PHP est perdu). Tout ce que vous définissez ou faites dans votre première demande n'existera pas sur votre deuxième demande.

Si vous souhaitez que les informations persistent, vous pouvez utiliser des sessions ou des cookies. Puisque vous utilisez Flash, sessions est probablement la meilleure façon de procéder. La première fois que vous appelez votre script, générez un jeton de session et renvoyez-le au flash avec votre réponse. Lors de tous les appels suivants, votre Flash doit fournir le jeton de session, et vous pouvez stocker/récupérer toutes les variables d'état dont vous avez besoin à partir de $_SESSION.

+0

Oui, c'est ce dont j'avais peur. On dirait que je dois faire des recherches sur les sessions et flash. Merci. – sol