我遇到了数据库请求的问题:网页根本没有加载。
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;
}
你有什么想法吗?
编辑:在我的日志中我有致命错误:允许的内存大小字节耗尽
所以我的循环一定是错的:/
答案 0 :(得分: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)");
注意立即打开/关闭括号的内部 双引号。