搜索栏不会返回结果


Search bar wont return results

无法弄清楚这里出了什么问题,没有出现错误,但没有返回任何信息。搜索栏应该返回我的数据库中其他用户的名称。

这是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)
);

提前感谢您的帮助!

除了中丢失的冒号

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:缺少:在属性id 之后

如果这仍然不适用于您,那么您的数据库中很可能有错误。

咨询:

  • http://php.net/manual/en/mysqli.error.php
  • http://php.net/manual/en/function.error-reporting.php

您似乎使用$username两次-

第一个用于数据库访问

 $username = "root";

然后参考数据库结果

$stmt->bind_result($username);

这似乎会导致冲突,因为$username="root"-尝试将名称更改为不同的变量,看看这是否有影响;例如:

$stmt->bind_result($user_name);

此外,在将元素推入数组之前,您还没有将$searchResults声明为数组,请在while循环之前添加以下内容:

$searchResults = array();

$partialSearch%通配符连接。

$stmt = $conn->prepare("SELECT username FROM members WHERE username LIKE ? ");
 $partialSearch = "%". $_POST['partialSearch'] ."%";
$stmt->bind_param('s',$partialSearch);
 ...

在Ajax查询中也缺少一个":"-应该是:

data: {partialSearch:partialSearch},