我想用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();
}
答案 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();