0

我有一个数据库请求问题:网页根本没有加载。

    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;
}   

你有什么主意吗 ?

编辑:在我的日志中我有致命错误:允许的内存大小字节用尽

所以我的循环一定是错误的:/

4

1 回答 1

1

您需要考虑数据库表中有多少行以及每行有多少字节。

您的表中是否有足够的数据来达到 PHP 配置的内存限制?

此外,请检查您的 SQL 构造中的逻辑。

具体来说:

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

where条款被解释为:

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

这是您想要的,还是您需要的:

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

在 MySQL 中,OR优先于AND.

最后,作为测试,取出解析$data数组并返回$row数组并打印出来的代码,print_r($row)并确保您的查询提取出您期望的数据。

希望这些想法能帮助您诊断问题。祝你好运!

注意:要在 SQL 中实现替代逻辑,您可以执行以下操作:

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

注意双引号内部的左/右括号。

于 2013-03-06T02:13:38.270 回答