无法弄清楚这里出了什么问题,没有出现任何错误,但没有任何错误被退回。搜索栏应该从我的数据库中返回其他用户的名称。
这是Test.php:
<?php
session_start();
?>
<!DOCTYPE html>
<head>
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript">
function search(partialSearch){
$.ajax({
url:"PHP.php",
type:"POST",
data {partialSearch:partialSearch},
success:function(result){
$("#results").html(result);
}
});
};
</script>
</head>
<body>
<div class="container">
<h3>Find Other users</h3>
<input type="text" name="partialSearch"onkeyup="search(this.value)"/>
<div id="results"></div>
</div>
</body>
</html>
这是PHP.php
<?php
$servername = "localhost";
$username = "root";
$password = "root";
$dbname = "coursework_db";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$partialSearch = $_POST['partialSearch'];
$stmt = $conn->prepare("SELECT username FROM members WHERE username LIKE ? ");
$stmt->bind_param('s',$partialSearch);
$stmt->execute();
$stmt->bind_result($username);
while ($row = $stmt->fetch()) {
$searchResults[] = $username;
echo "<div>".$searchResults."</div>";
}
?>
这是SQL表:
CREATE TABLE members (
memberID int(5) NOT NULL AUTO_INCREMENT,
username VARCHAR(65) NOT NULL UNIQUE,
password VARCHAR(65) NOT NULL,
PRIMARY KEY (memberID)
);
提前感谢您的帮助!
答案 0 :(得分:2)
除了
中缺少的冒号data {partialSearch:partialSearch},
^
应为:
data: {partialSearch:partialSearch},
您的PHP / MySQL语法已关闭。
您在
中声明$row
while ($row = $stmt->fetch())
但不在任何地方使用它。
然而,这对于一件好事来说是件坏事,因为你不需要那么多代码。
另外,既然您正在使用LIKE,那么您就没有使用正确的语法。
请参阅手册:http://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html
您的代码应该是这样的:
$partialSearch = "%". $_POST['partialSearch'] ."%";
$stmt = $conn->prepare("SELECT username FROM members WHERE username LIKE ? ");
$stmt->bind_param('s',$partialSearch);
$stmt->execute();
$stmt->bind_result($username);
while ($stmt->fetch()) {
echo $username;
echo "<div>".$searchResults."</div>";
}
检查完你的控制台并查看错误后,你会看到发生了什么。
JS控制台会抛出你:
SyntaxError:missing:属性id
之后
如果这仍然不适合您,那么您的数据库中很可能会出现错误。
请教:
答案 1 :(得分:0)
你似乎要两次使用$ username -
首先进行数据库访问
$username = "root";
然后引用数据库结果
$stmt->bind_result($username);
这似乎会导致冲突,因为$ username =&#34; root&#34; - 尝试将名称更改为其他变量,看看是否有所不同;例如:
$stmt->bind_result($user_name);
你还没有在将元素推入数组之前将$ searchResults声明为数组,在while循环之前添加以下内容:
$searchResults = array();
答案 2 :(得分:0)
将$partialSearch
与%
通配符连接起来。
$stmt = $conn->prepare("SELECT username FROM members WHERE username LIKE ? ");
$partialSearch = "%". $_POST['partialSearch'] ."%";
$stmt->bind_param('s',$partialSearch);
...
答案 3 :(得分:0)
您在Ajax查询中也缺少“:” - 应该是:
data: {partialSearch:partialSearch},