javascript - 使用 jQuery、Ajax 和 PHP 搜索 MySQL 表不起作用

标签 javascript php jquery mysql ajax

<分区>

我正在尝试使用 jQuery、Ajax 和 PHP 为 MySQL 表创建一个搜索引擎。我的外部服务器上有一个数据库,以便从中获取数据。这是 MySQL 数据库表的图片。 enter image description here
我有这两个搜索引擎脚本:

index.html

<!Doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <script src="//code.jquery.com/jquery-1.11.3.min.js"></script>
    </head>
    <body>
        <input id="searchdb"/>
        <div id="resultdb"></div>

        <script type="text/javascript">
            $(document).ready(function() {
                $('#searchdb').change(function() {
                    $.ajax({
                        type: 'GET',
                        url: 'getdb.php',
                        data: 'ip=' + $('#searchdb').val(),
                        success: function(msg) {
                            $('#resultdb').html(msg);
                        }
                    });
                });
            });
        </script>
    </body>
</html>

getdb.php

<?php
if ($_GET['insert']) :
    $insert = preg_replace('#[^0-9]#', '', $_GET['insert']);
    $servername = "localhost";
    $username = "username";
    $password = "password";
    $dbname = "mydb";

    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    } 


    $sql = "SELECT id, name FROM test WHERE id='.$insert.'";
    $result = $conn->query($sql);

    if ($result->num_rows > 0) {
    // output data of each row
        $row = $result->fetch_assoc() 
            echo $row["name"];
    }
endif;
?>

我想要的是键入 ID,按回车键并取回名称或“0 个结果”。我写的代码似乎有问题。请你帮助我好吗?提前致谢。

最佳答案

SQL 文本字符串中的句点字符被解释为文字点字符,而不是 PHP 连接。

例如

     $sql = "SELECT id, name FROM test WHERE id='.$insert.'";
     echo "SQL=" . $sql;

应该返回:

     SQL=SELECT id, name FROM test WHERE id='.123.'

这很容易修复。但为什么要首先将值作为 SQL 文本的一部分。

使用准备好的语句和绑定(bind)占位符真的没那么难

使用静态字符串作为SQL语句,使用问号作为绑定(bind)占位符,调用mysqli_stmt_bind_param函数。并检查准备和执行调用是否有错误。 (如果发生错误,它们将返回 FALSE。)并且不需要调用 num_rows。只是做一个获取。如果它返回一行,那么你就有了一行。如果它返回 FALSE,则没有要返回的行。

像这样:

    $sql = "SELECT id, name FROM test WHERE id = ? ";
    if ($stmt = $conn->prepare($sql)) {
        $stmt->bind_param("i",$insert);
        if ($stmt->execute()) {
            if ($row = $stmt->fetch_assoc()) {
                echo $row['name'];
            } else {
                echo "0 results";
            }
        } else {
            // handle error
            die $conn->error;
        }
    } else {
         // handle error
         die $conn->error;
    }

您可以根据您的要求以不同方式处理错误情况。

关于javascript - 使用 jQuery、Ajax 和 PHP 搜索 MySQL 表不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31529399/

相关文章:

javascript - 如何使用正则表达式突出显示字符串中的多个关键字/词?

javascript - 将 cellUpdateEvent 与 YUI 数据表和 JSON 数据源一起使用

javascript - javascript 导入的最佳做法是什么?

php - 如何在Drupal中显示两个 block 中的一个 block ?

php - 创建用户的脚本可以在本地主机上运行,​​但不能在服务器上运行

php - 在 php api 中集成 strip 订阅

javascript - 容器内的两个 div 重叠

javascript - 用Jquery,如何获取按钮绑定(bind)的功能

php - 添加json文件注释

javascript - 从 div 显示可拖动,显示设置为无