2015-12-10 41 views
0

我使用Ajax來發送一個搜索字符串PHP腳本執行類似功能的MySQL來找到像串的用戶名所有相關條目好友發送搜索。我在數據庫zukeru和zukeru2中有兩個當前條目。當我搜索z我只得到zukeru返回在我的控制檯輸出。當我搜索2我仍然得到zukeru和我真的不知道爲什麼。PHP字符串比較搜索只返回一個項目沒有返回正確的條目

另外如何i。從一個PHP嵌套元組刪除特定的字段。出於顯而易見的原因,我不想包含密碼字段。對不起,即時通訊新的PHP學習,因爲我到目前爲止它不像我認爲它會有點類似於Python。

返回的對象搜索2號的時候,但我得到zukeru而不是zukeru2沒有意義。

Object {0: "2", 1: "you wish you could see", 2: "zukeru", 3: "deleted for security", 4: "grant", id: "2", email: "deleted for security", username: "zukeru", password: "deleted for security", name: "grant"} 

這是我用於上述結果的搜索字符串。你可以看到我搜索2和回來zukeru而不是zukeru2

profile.php:92 searchstring=2 

<?php 
    $db = new mysqli(security reasons removed.); 
    extract($_POST); 
    //I think i can remove this session start ? 
    session_start(); 
    $serach_string = $_POST['searchstring']; 
    $fetch=$db->query("SELECT * FROM users WHERE username LIKE '%$serach_string%'"); 
    $friends=mysqli_fetch_array($fetch); 
    //echo $search_string 
    echo json_encode($friends); 
?> 

這裏是我的jQuery櫃面你想看到

function search(){ 
     var url = "search_friends.php";  
      $.ajax({ 
      type: "POST", 
       url: url, 
       data: $("#search_friends").serialize(), // serializes the form's elements. 
       success: function(data) 
        { 
        //console.log(data);  
        var returned_friends = JSON.parse(data); 
        var html_built = '<br>'; 
        console.log(returned_friends); 
        console.log($("#search_friends").serialize()); 
        if (returned_friends){ 
         $.each(returned_friends, function(key, value) { 
          if (key =="username"){ 
           html_built += '<li><a href="#"><button class="btn btn-primary" style="width:100%;" id="'+value+'" onClick="add_friend(this.id)"> Send '+value+' A Friend Request</button></li>'; 
          } 
         }); 
        } 
        html_built += "" 
        document.getElementById("list_friends").innerHTML = html_built; 

        } 
       }); 
     return false; 
    } 

這是林目前正在使用,我得到了一個未定義的方法。它找不到fetch_all();並使用PHP 5.4

這裏IM是控制檯錯誤返回。

<br /> 
<b>Fatal error</b>: Call to undefined method mysqli_result::fetch_all() in <b>/home/gzukel/public_html/search_friends.php</b> on line <b>7</b><br /> 

<?php 
    $db = new mysqli(); 
    extract($_POST); 
    session_start(); 
    $serach_string = $_POST['searchstring']; 
    if($fetch=$db->query("SELECT username FROM users WHERE username LIKE '%$serach_string%'")){ 
     $friends=$fetch->fetch_all(); 
     echo json_encode($friends); 
    }else{ 
     echo 'no results'; 
    } 
?> 
+1

RTFM:http://php.net/manual/en/mysqli-result.fetch-array.php - 抓取函數返回一個單行結果,而不是整個結果集。 –

+0

那麼返回結果集的最好方法是什麼?標準的常見做法是什麼? –

+0

取一個循環,構建陣列,則數組 –

回答

0

所以像這樣?

<?php 
    $db = new mysqli(); 
    extract($_POST); 
    session_start(); 
    $serach_string = $_POST['searchstring']; 
    $fetch=$db->query("SELECT * FROM users WHERE username LIKE '%$serach_string%'"); 
    $friends=[] 

    while($row = $fetch->fetch_array()) 
    { 
     $rows[] = $row; 
    } 

    foreach($rows as $row) 
    { 
     array_push($friends,$row['username']); 
    } 
    //echo $search_string 
    echo json_encode($friends); 
?> 
+0

如果你只需要朋友的名字,那麼就不要選擇'*'。這是對cpu /數據庫時間的浪費。只需選擇用戶名並構建一個單一的數組。 –

0

你可以使用fetch all

if($fetch=$db->query("SELECT username FROM users WHERE username LIKE '%$serach_string%'")){ 

    $friends= $fetch->fetch_all(); 

    echo json_encode($friends); 
}else{ 
    echo 'no results'; 
} 
+0


致命錯誤:調用未定義的方法mysqli_result :: fetch_all()在/home/gzukel/public_html/search_friends.php使用獲取所有返回未定義@andrew –

+0

( http://php.net/manual/en/mysqli.query.php)應該返回作爲mysqli結果對象,如果不是查詢或連接是錯誤的,虐待編輯以上顯示如何檢查該 –

+0

[mysqli_query]線路
andrew