我知道这是一个简单的php,但是我在使用codeigniter写出逻辑时遇到了很大麻烦。
我正在尝试拉出最近的12位用户并在视图中显示他们的信息。我在数据库表中创建了一个'created_on'字段来跟踪注册活动。
当我在控制器中指定一个id时,我能够将结果从我的模型传递到我的控制器,然后是我的视图,但是它只会拉动一个用户。
MODEL:
public function newest_members()
{
$session = $this->session->userdata('is_logged_in');
$user_id = $this->session->userdata('id');
$query = $this->db->query("SELECT * FROM users WHERE status = 'active' && id = $user_id ORDER BY created_on DESC LIMIT 12");
if($query->num_rows()==1)
{
$data = $query->result_array();
return $data;
}else{
return array();
}
}
控制器:
public function dashboard()
{
$this->load->library('session');
$this->load->helper('date');
$session_id = $this->session->userdata('id');
$this->load->model('account_model');
$this->load->model('community_model');
$user = $this->account_model->user();
$data['user'] = $user;
$newest_members = $this->community_model->newest_members();
$data['newest_members'] = $newest_members;
$data['main_content'] = 'account/dashboard';
$this->load->view('includes/templates/main_page_template', $data);
}
查看:
<?php
foreach($newest_members as $nm)
{
echo $nm['first_name']; echo "<br />"; echo $nm['last_name'];
}
?>
这是拉出最新成员和已登录的成员的结果。但是我想要拉入所有登录或不登录,所以我尝试使用我的模型:
public function newest_members()
{
$query = $this->db->query("SELECT * FROM users WHERE status = 'active' ORDER BY created_on DESC LIMIT 12");
// OR YOU CAN USE THE BELOW
// $query = $this->db->query("SELECT * FROM users ORDER BY `created_on` DESC LIMIT 12");
// YOU ALSO MIGHT WHAT TO ADD WHERE `status` = 'active' (or whatever applies for your db table)
// EITHER SPIT OUT RESULTS OR EMPTY ARRAY
if($query->num_rows()==1)
{
$data = $query->result_array();
return $data;
}else{
return array();
}
提前感谢。
答案 0 :(得分:0)
codeigniter num_rows()函数不返回布尔值,而是返回从数据库中获取的结果数。因此,您的模型应该具有以下内容:
if($query->num_rows() > 0)
{
...
}
有关详细信息,请参阅here
答案 1 :(得分:0)
你想拉出12个最新的活跃会员?你做得对。
SELECT * FROM users WHERE status = 'active' ORDER BY created_on DESC LIMIT 12
此外,您不想检查是否只返回一行。您想检查是否返回超过零行。你需要这样做:
if($query->num_rows() > 0)
{
$data = $query->result_array();
return $data;
}
答案 2 :(得分:0)
由于您使用codeigniter,它有一个称为活动记录的精彩功能,这使得使用数据库变得更加容易和安全,然后将原始查询编写为可能导致SQL注入的字符串。以下是您使用活动记录并返回您期望的结果的功能。
public function newest_members()
{
//Select the 12 newest users
$result = $this->db->where('status', 'active')->order_by('created_on', 'desc')->limit(12)->get('users');
//If results are found return an array otherwise return an empty array
return ($result->num_rows() > 0) ? $result->result_array() : array();
}
答案 3 :(得分:0)
SELECT TOP 12 FROM users WHERE status = 'active' ORDER BY created_on DESC
我正在使用mssql,如果有帮助可以试试