【问题标题】:php string comparison search only returning one entry not returning correct entriesphp字符串比较搜索只返回一个条目不返回正确的条目
【发布时间】:2015-12-10 18:41:33
【问题描述】:

我正在使用 ajax 将搜索字符串发送到执行类似 mysql 的函数的 php 脚本,以查找所有与用户名相关的条目,例如发送用于好友搜索的字符串。我在数据库 zukeru 和 zukeru2 中有两个当前条目。当我搜索 z 时,我只会在控制台输出中返回 zukeru。当我搜索 2 时,我仍然得到 zukeru,我真的不知道为什么。

还有如何从 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

这是返回的控制台错误。

<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';
    }
?>

【问题讨论】:

  • RTFM:php.net/manual/en/mysqli-result.fetch-array.php - 提取函数返回单行结果,而不是整个结果集。
  • 那么返回结果集的最佳方式是什么?标准的常见做法是什么?
  • 循环获取,构建数组,然后对数组进行编码
  • 所以像我在@MarcB下面发布的内容

标签: javascript php jquery mysql


【解决方案1】:

这样的?

<?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);
?>

【讨论】:

  • 如果你只需要朋友的名字,那么不要select *。那是在浪费 CPU/数据库时间。只需select username 并构建一个数组。
【解决方案2】:

你可以使用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';
}

【讨论】:


  • 致命错误:调用 /home/gzukel/public_html/search_friends.php 中未定义的方法 mysqli_result::fetch_all()上线8
  • 使用 fetch all 返回 undefined @andrew
  • mysqli_query 应该作为 mysqli 结果对象返回,如果不是查询或连接错误,请编辑上面的内容以显示如何检查
  • @GrantZukel 你可能使用 php
  • 这篇文章“可能”帮助你,stackoverflow.com/questions/11664536/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-07
  • 1970-01-01
  • 2013-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多