没有从数据库中获取所有行


not getting all rows from the database

我在codeigniter中开发了一个自动完成函数,但问题是,如果我们键入两个字母,它会匹配2个或2个以上的字符,但它只显示1个记录,我不知道为什么会发生这种情况。有人能帮我吗。

我有3条记录符合这样的标准:

  • 车辆
  • 重型道路车辆
  • 小型车辆

当我键入Ve时,它会向我显示设计&开发,当我键入Beh时,它只显示车辆因为它应该显示所有三个。所有3条记录都包含车辆的名称,有人能告诉我在哪里出错吗

这是我的php模型Get_data.php

public function result($keyword) {
        $get_data = $this->db->like('cat_name', $keyword);
        $get_data = $this->db->order_by("cat_id", "ASC"); 
        $get_data = $this->db->get('categories');
        foreach($get_data->result() as $data):
            $sport = str_replace($keyword, "<b>" . $keyword . "</b>" , $data->cat_name);
            $html  = '<li onclick="set_item('''.str_replace("'", "''", $data->cat_name).''')">';
            $html .= $sport;
            $html .= "</li>";
            return $html;
        endforeach;
    }

我的php控制器

public function getData() {
        $keyword = $this->input->post('keyword');
        $html = $this->get_data->result($keyword);
        echo $html;
    }

这是我使用的ajax查询

function autocomp() {
var min_length = 0;
var keyword    = $("#skills").val();
if(keyword.length > min_length) {
    $.ajax({
        type     :  "POST",
        data     :  {keyword: keyword},
        dataType :  'text',
        url      :  "http://localhost:90/tufuturo/home/getData",
        success  :  function(data) {
                        $("#resultkeyword").show();
                        if(data == false) {
                            $("#resultkeyword").html("<li>No Results Found</li>");
                        } else {
                            $("#resultkeyword").html(data);
                        }
                    }
    });
} else {
    $("#resultkeyword").hide();
}
}
function set_item(item) {
    $("#skills").val(item);
    $("#resultkeyword").html("<li><b>"+item+"</b></li>");
    $("#resultkeyword").hide();
}

仅更新foreach循环

$html = '';
foreach($get_data->result() as $data):
            $sport = str_replace($keyword, "<b>" . $keyword . "</b>" , $data->cat_name);
            $html  .= '<li onclick="set_item('''.str_replace("'", "''", $data->cat_name).''')">';
            $html .= $sport;
            $html .= "</li>";
            
        endforeach;
return $html;

返回类型后,所有内容都将消失。您在foreach循环中写入return。循环只迭代一次并返回。

需要将li的起始标签与$html 连接

也作为返回foreach循环之外

foreach($get_data->result() as $data):
            $sport = str_replace($keyword, "<b>" . $keyword . "</b>" , $data->cat_name);
            $html  .= '<li onclick="set_item('''.str_replace("'", "''", $data->cat_name).''')">';
            $html .= $sport;
            $html .= "</li>";
        endforeach;
return $html;// return here

使用num_rows();检查查询返回结果是否为

$num = $get_data->num_rows();
if($num>0)
{
 foreach($get_data->result() as $data):
                $sport = str_replace($keyword, "<b>" . $keyword . "</b>" , $data->cat_name);
                $html  .= '<li onclick="set_item('''.str_replace("'", "''", $data->cat_name).''')">';
                $html .= $sport;
                $html .= "</li>";
            endforeach;
}else{
     $html="<li>NO result found</li>";
}
    return $html;// return here

尝试给LIKE命令第三个参数,让您将通配符%放在所需的位置。我建议在第三个参数中使用"after"更改此行$get_data=$this->db->like('cat_name',$keyword);至

$get_data = $this->db->like('cat_name', $keyword,'after');