2013-03-05 3 views
0

J'ai un problème avec une demande de base de données: la page Web ne charge pas du tout.codeigniter/page de base de données ne charge pas

public function get_mylist($user_id){ 
     $this->db->select('*'); 
     $this->db->from($this->_table); 
     $this->db->where('my', '1'); 
     $this->db->where('user1', $user_id); 
     $this->db->or_where('user2', $user_id); 
     $query = $this->db->get()->result_array(); 
     if($query!=NULL) 
     { 
      foreach($query as $row) 
      { 
      echo $row['user1']; 
       if($row['user2'] != $user_id) 
       { 
        $data[] = $row['user2']; 
       } 
       else if($row['user1'] != $user_id) 
       { 
        $data[] = $row['user1']; 
       } 
      } 
      return $data; 
     } 
     else return 0; 
} 

Avez-vous une idée?

modifier: dans mon journal j'ai Erreur fatale: Autorisé octets de taille mémoire épuisé

Donc, ma boucle doit se tromper:/

+0

J'ai cette erreur dans mon journal: Erreur fatale: Octets de taille de mémoire autorisés épuisés. Je dois avoir une erreur dans ma boucle, si quelqu'un peut le voir – user2017358

Répondre

1

Vous devez considérer le nombre de lignes dans votre table de DB et combien d'octets Par rangée.

Avez-vous suffisamment de données dans votre table pour atteindre la limite de mémoire pour votre configuration PHP?

Vérifiez également votre logique dans votre construction SQL.

Plus précisément:

$this->db->where('my', '1'); 
$this->db->where('user1', $user_id); 
$this->db->or_where('user2', $user_id); 

Cette where clause est interprété comme:

WHERE (`my` = 1 AND `user1` = $user_id) OR (`user2` = $user_id) 

Est-ce ce que vous vouliez, ou avez-vous besoin:

WHERE `my` = 1 AND (`user1` = $user_id OR `user2` = $user_id) 

En MySQL, OR a priorité sur AND.

Enfin, comme un test, prenez le code qui parse le tableau $data et retourne le tableau $row et l'imprimer à l'aide print_r($row) et assurez-vous que votre demande tire les données que vous attendez.

Espérons que ces idées vous aideront à diagnostiquer le problème. Bonne chance!

Note: Pour mettre en œuvre la logique alternative SQL, vous pouvez faire quelque chose comme:

$this->db->where('my', '1'); 
$this->db->where("(`user1` = $user_id OR `user2` = $user_id)"); 

attention à la parenthèse d'ouverture/fermeture immédiatement à l'intérieur des guillemets doubles.

+0

Merci pour la réponse rapide. ma table sql a 3 colonnes et 2 rangs donc je ne pense pas que le probelm provienne de la mémoire. Donc, j'ai seulement une ligne qui renvoie l'utilisateur 1 et l'utilisateur 2, donc je ne comprends pas ce qui se passe. Comment puis-je obtenir WHERE my = 1 ET (user1 = $ user_id OU user2 = $ user_id)? devrais-je mettre l'où ('my', '1') après les autres conditions? – user2017358

+0

Après plusieurs tests, j'ai trouvé que le problème venait du "retour". Je peux var_dump (data) et il montre un tableau mais je ne peux pas le retourner oO " – user2017358

+0

Dans votre snippet," $ data "est un tableau, pas un objet, mais vous pouvez définir un objet si c'est ce que vous préférez. message d'erreur de mémoire peut être dû à essayer d'utiliser un tableau comme un objet (?) –

Questions connexes