【问题标题】:Simple PHP/Ajax for a search suggestion program - only displaying results from database typed in full用于搜索建议程序的简单 PHP/Ajax - 仅显示完整键入的数据库中的结果
【发布时间】:2015-06-23 03:30:30
【问题描述】:

所以我的问题很简单。我是一个 PHP 初学者(一般是新手程序员,3 个月前开始),我一直在关注一些关于如何构建“搜索建议”系统的教程,如果你输入的内容像任何东西一样检查数据库并使用 AJAX 实时显示结果。

它正在部分工作。例如,当我输入完整的用户名时,它会显示结果。但不是当我输入一半或第一个字母时。

<?php

    require 'connect.php';

    if (isset($_GET['searchText'])) {
        $searchText = $_GET['searchText'];
    }

    if($query = $db->prepare("SELECT user_name FROM users WHERE user_name LIKE ?")) {
        $query->bind_param('s', $searchText);
        $query->execute();

        $query->bind_result($searchTextResult);

        while ($query->fetch()) {
            echo $searchTextResult;
        }
    }

?>

另外,由于我是一个完全的菜鸟,我很想对代码提出任何建议,只是想知道我是否总体上采用了良好的做法。我听说有人推荐 binding 和 mysqli,所以我正在努力坚持它们,而且我很少受到任何批评。

【问题讨论】:

  • 您需要使用% 通配符。 stackoverflow.com/questions/1352002/…
  • 对于问题的最后一部分,您可以在 [CodeReview ](codereview.stackexchange.com) 上提问,这是一个用于此目的的 stackexchange 网站。
  • 使用onkeyup 事件处理程序使ajax 调用您的服务器文件以获取全名,每当您按下键盘时都会调用它。尝试 google 更多相关信息,查看简单演示 stackoverflow.com/questions/10968419/ajax-call-on-keyup
  • 你应该调用 php 并检查 keyup 事件的结果 - 你能显示脚本的 javascript/ajax 部分吗?
  • 要跟进@DigitalChris 评论 - 您需要将通配符附加到您的 $searchText 变量中,例如:$query-&gt;bind_param('s', $searchText . '%'); ... 但您需要使用 bind_value 而不是在这种情况下,考虑它的参数...因为bind_param 期望变量通过引用传递...或者您可以在定义 var 时添加它:$searchText = $_GET['searchText'] . '%';

标签: php mysql ajax search mysqli


【解决方案1】:

部分搜索参数的sql查询是这样的:

"select user_name FROM users WHERE user_name LIKE CONCAT('%',?,'%')"

【讨论】:

  • 这不仅行不通,他已经在使用比内联更好的绑定参数了。
  • 你知道,我什至不知道这是否适用于绑定参数......它可能但对我来说有点太奇怪了......我只是在通配符中连接在应用程序级别。不过,我将删除反对票,因为我不会很快对此进行测试。
【解决方案2】:

感谢大家的所有回答。这是我第一次使用 StackOverflow,我很喜欢它。我希望有一天我能回报这个人情。

我所要做的就是一开始就在 $searchText 变量中添加“%”,然后一切顺利。

现在正确的代码如下:

<?php

require 'connect.php';

if (isset($_GET['searchText'])) {
    $searchText = $_GET['searchText'] . '%';
}

if($query = $db->prepare("SELECT user_name FROM users WHERE user_name LIKE ?")) {
    $query->bind_param('s', $searchText );
    $query->execute();

    $query->bind_result($searchTextResult);

    while ($query->fetch()) {
        echo $searchTextResult . "<br />";
    }
}

?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-26
    • 2013-03-30
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多