Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
搜索建议程序的简单PHP/Ajax-仅显示完整键入的数据库结果_Php_Mysql_Ajax_Search_Mysqli - Fatal编程技术网

搜索建议程序的简单PHP/Ajax-仅显示完整键入的数据库结果

搜索建议程序的简单PHP/Ajax-仅显示完整键入的数据库结果,php,mysql,ajax,search,mysqli,Php,Mysql,Ajax,Search,Mysqli,所以我的问题很简单。我是一名PHP初学者(一般来说是noob程序员,3个月前开始),我一直在学习一些关于如何构建“搜索建议”系统的教程,该系统会检查数据库中键入的内容是否与其中的内容相似,并使用AJAX实时显示结果 它正在部分工作。例如,当我输入完整用户名时,它会显示结果。但当我打了一半或第一个字母的时候就不行了 <?php require 'connect.php'; if (isset($_GET['searchText'])) { $searchT

所以我的问题很简单。我是一名PHP初学者(一般来说是noob程序员,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;
        }
    }

?>


另外,由于我是一个彻头彻尾的noob,我很想对代码有任何建议,只是想知道我是否在使用良好的实践。我听说binding和mysqli是推荐的,所以我尽量坚持使用它们,很少受到任何批评。

部分搜索参数的sql查询如下所示:

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

谢谢大家的回答。这是我第一次上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 />";
    }
}

您需要使用
%
通配符。对于问题的最后一部分,您可以在[CodeReview]()上提问,这是一个用于此目的的stackexchange站点。使用
onkeyup
事件处理程序调用服务器文件以获取全名,每当您键入键盘时,都会调用该事件处理程序。尝试在谷歌上搜索更多信息,查看简单的演示,您应该调用php并检查keyup事件的结果-您可以显示脚本中的javascript/ajax部分吗?要从@DigitalChris comment跟进,您需要将通配符附加到
$searchText
变量,如:
$query->bind_param('s',$searchText.%')。。。但在这种情况下,您需要使用
bind_value
而不是param,仔细想想。。。由于
bind_param
希望通过引用传递变量。。。或者您可以在定义变量时添加它:
$searchText=$\u GET['searchText'].%'这不仅不起作用,他已经在使用绑定参数,这比内联的要好。你知道,我甚至不知道绑定参数是否起作用。。。可能吧,但这对我来说太奇怪了。。。我只想在应用程序级别输入通配符。不过,我会删除否决票,因为我不会很快测试它。