搜索建议程序的简单PHP/Ajax-仅显示完整键入的数据库结果
所以我的问题很简单。我是一名PHP初学者(一般来说是noob程序员,3个月前开始),我一直在学习一些关于如何构建“搜索建议”系统的教程,该系统会检查数据库中键入的内容是否与其中的内容相似,并使用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
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'].%'代码>这不仅不起作用,他已经在使用绑定参数,这比内联的要好。你知道,我甚至不知道绑定参数是否起作用。。。可能吧,但这对我来说太奇怪了。。。我只想在应用程序级别输入通配符。不过,我会删除否决票,因为我不会很快测试它。