从基数中选择只返回一行而不是所有可匹配的行

时间:2016-01-13 11:38:13

标签: php codeigniter

我想用PHP进行实时搜索。我使用CodeIgniter。我遇到了可能匹配的记录问题。他们没有被退回,例如当我输入A时我得到了两个名字Adam和Andrew我只会看到Adam我必须写An来获得Andrew。

型号代码:

public function get_user_search($q){
$query = $this->db->like('name', $q, 'after');
$query = $this->db->get('book');
$result = $query ->row_array();
echo json_encode($result);
}

演示代码:

function showResult(str){

  if (str.length==0){
    document.getElementById("livesearch").innerHTML="";
    document.getElementById("livesearch").style.border="0px";
    return;
  }
  if (window.XMLHttpRequest){
    // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
  }else{  // code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.onreadystatechange=function(){
    if (xmlhttp.readyState==4 && xmlhttp.status==200) {
    var obj = JSON.parse(xmlhttp.responseText);
    if(obj!=null){
  for (var key in obj) {
   if (obj.hasOwnProperty(key)) {
    console.log(key + " -> " + obj[key]); //here I see only one row from base
  }
  }
    //console.log(JSON.stringify(obj));
     // document.getElementById("livesearch").innerHTML = obj.name+" "+obj.surname+" "+obj.telephone+" "+obj.street;
      }else{
      document.getElementById("livesearch").innerHTML = "brak wynikow";// have not found match - information
      }

  }
 }
  xmlhttp.open("GET","search?q="+str,true);
  xmlhttp.send();
}

2 个答案:

答案 0 :(得分:1)

<强> row_array()

  

此函数返回单个结果行数组

而不是row_array()您必须使用result_array()并使用foreach loop来获得所有可能的结果

function get_user_search($q) {
    $result=array();
    $query = $this->db->like('name', $q, 'after');
    $query = $this->db->get('book');
    foreach($query->result_array()as $data){
        $result[]=$data;
    }
    echo json_encode($result);
}

阅读https://www.codeigniter.com/userguide3/database/results.html

答案 1 :(得分:0)

您正在使用row_array();返回一行的函数。

使用result_array();代替row_array();