获取所有现有行的PHP MVC查询只返回1行
我有一个工作查询,但它只返回1行-我可以在哪里或做什么来返回所有现有行 型号:获取所有现有行的PHP MVC查询只返回1行,php,model-view-controller,Php,Model View Controller,我有一个工作查询,但它只返回1行-我可以在哪里或做什么来返回所有现有行 型号: public function getInfo() { $info_query = $this->db->query("SELECT * FROM `km_info` WHERE ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW()
public function getInfo() {
$info_query = $this->db->query("SELECT * FROM `km_info` WHERE ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) AND status = '1'");
if ($info_query->num_rows){
return array(
'info_id' => $info_query->row['info_id'],
'name' => $info_query->row['name'],
'amount' => $info_query->row['amount'],
'date_start' => $info_query->row['date_start'],
'date_end' => $info_query->row['date_end'],
'status' => $info_query->row['status'],
'date_added' => $info_query->row['date_added']
);
}
}
$data = [];
if ($info_query->num_rows){
foreach ($info_query->result() as $row) {
$data[] = array(
'info_id' => $row['info_id'],
'name' => $row['name'],
'amount' => $row['amount'],
'date_start' => $row['date_start'],
'date_end' => $row['date_end'],
'status' => $row['status'],
'date_added' => $row['date_added']
);
}
return $data;
}
在控制器中尝试foreach()时,仍然只得到一行:
foreach ($info_options as $info) {
var_dump($info_options['name']);exit;
//var_dump($info_options['name']); results: Warning: Illegal string offset 'name'
}
在模型中,当我转储时:
$info\u query
我得到了9——这是我所期望的所有行
不太确定我遗漏了什么或做错了什么。你没有重复结果。不在模型中,也不在控制器中。虽然我不知道你为什么要做两次。也许我只是不理解你的代码 型号:
public function getInfo() {
$info_query = $this->db->query("SELECT * FROM `km_info` WHERE ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) AND status = '1'");
if ($info_query->num_rows){
return array(
'info_id' => $info_query->row['info_id'],
'name' => $info_query->row['name'],
'amount' => $info_query->row['amount'],
'date_start' => $info_query->row['date_start'],
'date_end' => $info_query->row['date_end'],
'status' => $info_query->row['status'],
'date_added' => $info_query->row['date_added']
);
}
}
$data = [];
if ($info_query->num_rows){
foreach ($info_query->result() as $row) {
$data[] = array(
'info_id' => $row['info_id'],
'name' => $row['name'],
'amount' => $row['amount'],
'date_start' => $row['date_start'],
'date_end' => $row['date_end'],
'status' => $row['status'],
'date_added' => $row['date_added']
);
}
return $data;
}
控制器:
$info_options = $this->model_extension_total_info->getInfo();
if ($info_options){
$json['info_options'] = array();
$json['info_options'][] = array(
'info_id' => $info_options['info_id'],
'name' => $info_options['name'],
'amount' => $info_options['amount'],
'date_start' => $info_options['date_start'],
'date_end' => $info_options['date_end'],
'status' => $info_options['status'],
'date_added' => $info_options['date_added']
);
}
$info_options = $this->model_extension_total_info->getInfo();
$json['info_options'] = array();
if ($info_options){
foreach ($info_options as $info) {
$json['info_options'][] = array(
'info_id' => $info['info_id'],
'name' => $info['name'],
'amount' => $info['amount'],
'date_start' => $info['date_start'],
'date_end' => $info['date_end'],
'status' => $info['status'],
'date_added' => $info['date_added']
);
}
}
从技术上讲,你根本不需要循环。你可以:
public function getInfo() {
$info_query = $this->db->query("SELECT * FROM `km_info` WHERE ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) AND status = '1'");
if ($info_query->num_rows){
return $info_query->result();
}
else
{
return false;
}
}
你不是在重复结果。不在模型中,也不在控制器中。虽然我不知道你为什么要做两次。也许我只是不理解你的代码 型号:
public function getInfo() {
$info_query = $this->db->query("SELECT * FROM `km_info` WHERE ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) AND status = '1'");
if ($info_query->num_rows){
return array(
'info_id' => $info_query->row['info_id'],
'name' => $info_query->row['name'],
'amount' => $info_query->row['amount'],
'date_start' => $info_query->row['date_start'],
'date_end' => $info_query->row['date_end'],
'status' => $info_query->row['status'],
'date_added' => $info_query->row['date_added']
);
}
}
$data = [];
if ($info_query->num_rows){
foreach ($info_query->result() as $row) {
$data[] = array(
'info_id' => $row['info_id'],
'name' => $row['name'],
'amount' => $row['amount'],
'date_start' => $row['date_start'],
'date_end' => $row['date_end'],
'status' => $row['status'],
'date_added' => $row['date_added']
);
}
return $data;
}
控制器:
$info_options = $this->model_extension_total_info->getInfo();
if ($info_options){
$json['info_options'] = array();
$json['info_options'][] = array(
'info_id' => $info_options['info_id'],
'name' => $info_options['name'],
'amount' => $info_options['amount'],
'date_start' => $info_options['date_start'],
'date_end' => $info_options['date_end'],
'status' => $info_options['status'],
'date_added' => $info_options['date_added']
);
}
$info_options = $this->model_extension_total_info->getInfo();
$json['info_options'] = array();
if ($info_options){
foreach ($info_options as $info) {
$json['info_options'][] = array(
'info_id' => $info['info_id'],
'name' => $info['name'],
'amount' => $info['amount'],
'date_start' => $info['date_start'],
'date_end' => $info['date_end'],
'status' => $info['status'],
'date_added' => $info['date_added']
);
}
}
从技术上讲,你根本不需要循环。你可以:
public function getInfo() {
$info_query = $this->db->query("SELECT * FROM `km_info` WHERE ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) AND status = '1'");
if ($info_query->num_rows){
return $info_query->result();
}
else
{
return false;
}
}
是否需要在这两种情况下循环?当我添加控制器循环时,我得到所有变量的
警告:非法字符串偏移量'variable\u name'
。现在就去试试模型钻头;我想你已经编辑了,因为我最初看到这篇博文是的,对不起,这是codeigniter,对吗?我已经有一点没用它了。你不必循环两次,你的代码看起来就像你在做同样的事情两次。您只需将控制器中的$info_选项传递到您的视图,我不知道您为什么要将其重新打包到数组中。不,Opencart,但这不是本机代码。。这就是我寻求帮助的原因。正在尝试添加当前不存在的功能。你说你可以将控制器中的$info_选项直接传递到你的视图是什么意思,我不知道你为什么要将它重新打包到阵列中——我还在通过MVC学习。控制器代码产生了同样的错误。坦白地说,你根本不需要循环任何东西。我会更新我的答案。我认为Opencart中有什么东西干扰了这一点。。当我运行更新的代码时,仍然会得到非法的字符串偏移量<代码>变量转储($info\u query->rows);退出代码>向我显示我试图获取的所有内容。当我添加foreach()循环时,错误消失了,但仍然只有一个结果。困惑不解。是否需要两个都循环?当我添加控制器循环时,我得到所有变量的警告:非法字符串偏移量'variable\u name'
。现在就去试试模型钻头;我想你已经编辑了,因为我最初看到这篇博文是的,对不起,这是codeigniter,对吗?我已经有一点没用它了。你不必循环两次,你的代码看起来就像你在做同样的事情两次。您只需将控制器中的$info_选项传递到您的视图,我不知道您为什么要将其重新打包到数组中。不,Opencart,但这不是本机代码。。这就是我寻求帮助的原因。正在尝试添加当前不存在的功能。你说你可以将控制器中的$info_选项直接传递到你的视图是什么意思,我不知道你为什么要将它重新打包到阵列中——我还在通过MVC学习。控制器代码产生了同样的错误。坦白地说,你根本不需要循环任何东西。我会更新我的答案。我认为Opencart中有什么东西干扰了这一点。。当我运行更新的代码时,仍然会得到非法的字符串偏移量<代码>变量转储($info\u query->rows);退出代码>向我显示我试图获取的所有内容。当我添加foreach()循环时,错误消失了,但仍然只有一个结果。困惑的