【发布时间】: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->bind_param('s', $searchText . '%');... 但您需要使用bind_value而不是在这种情况下,考虑它的参数...因为bind_param期望变量通过引用传递...或者您可以在定义 var 时添加它:$searchText = $_GET['searchText'] . '%';
标签: php mysql ajax search mysqli