【问题标题】:PHP - AJAX and MySQL - Query errorPHP - AJAX 和 MySQL - 查询错误
【发布时间】:2017-01-17 03:40:10
【问题描述】:

在过去的几天里,我建立了自己的本地 Web 服务器并开始开发原型 Web 应用程序。这个 Web 应用程序现在很简单。我有一个下拉列表,其中包含 MySQL 表的名称和一个 div,它将使用所选表的所有行进行更新。是的,当我尝试一个简单的查询从 table_name 中选择 * 时,div 已正确更新。

但是,我现在引入 AJAX 以向下拉列表添加功能,并且 div 不会更新。我使用了 W3 中的代码,但他们的查询与我的不同,否则它确实适用于不使用变量作为表名的查询。我已经通过反复试验查明了确切的问题,但我不知道如何解决它。 (我已经在网上寻找答案了) AJAX 脚本使用一个函数,当下拉列表中的项目被选中时调用该函数。一旦项目被选中,AJAX 就会执行它的请求,然后将变量发送到 php 文件。 php 文件已成功获取信息,但仅在我执行以下查询时:

    $sql = "select * from table_name where Price = '" . $q . "'";

确切的问题:我正在尝试使用该变量作为表名,并且我已经以我能想到的所有可能方式格式化了字符串,但字符串是错误的。我不断收到错误 "mysqli_fetch_assoc() 期望参数 1 是 mysqli_result" 但我之前一直在这条路上,所以我知道这是因为 SQL 查询字符串。 (我也尝试过不同的 mysqli_fetch 函数)

这里是我的代码的外观,以防您需要一些见解,但我相信这与查询有关。

AJAX 脚本

    function showUser(str) {
        if (str === "") {
            document.getElementById("playerList").innerHTML = "";
            return;
        } else {
            if (window.XMLHttpRequest) {
                // code for IE7+, Firefox, Chrome, Opera, Safari
                xmlhttp = new XMLHttpRequest();
            } else {
                // code for IE6, IE5
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            xmlhttp.onreadystatechange = function () {
                if (this.readyState === 4 && this.status === 200) {
                    document.getElementById("playerList").innerHTML = this.responseText;
                }
            };
            xmlhttp.open("GET", "getuser.php?q=" + str, true);
            xmlhttp.send();
        }
    }

PHP 代码

    <?php

    $q = intval($_GET['q']);

    require 'conn.php';
    $query = "SELECT * FROM $q";
    $result = mysqli_query($conn, $query);

    while ($row = mysqli_fetch_assoc($result)) {
    //echo with html formatting
    }

    mysqli_close($conn);
    ?>

我尝试了几种不同的方式来格式化查询

    $query = "select * from `$q`";

    $query = "select * from `" . $q . "`";

    $query = "select * from "$q"";

    $query = "select * from " . $q . "";

    $query = "select * from '" . $q . "'";

    //I've even tried this, and it works but it's not dynamic because it's not using the variable!
    $table = "table_name";
    $query = "select * from $table_name";

【问题讨论】:

  • $q 是您的表名吗?那很危险,问问 Bobby Tables 就知道了。既然你是 intval 它,$q 在语义上似乎是一个 ID,所以我怀疑你想要 SELECT * FROM user WHERE id="$q"(但使用准备好的语句而不是直接内联)。
  • @bijan kelly 您的查询错误。表名在哪里。
  • 我需要从用户中选择所有,所以我需要从intval更改吗?
  • 从getuser.php文件的第一行去掉intval函数。

标签: php mysql ajax database


【解决方案1】:

intval($_GET['q']);替换为$_GET['q'];

【讨论】:

  • 谢谢,我还在学php,没赶上整数的转换
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-02
相关资源
最近更新 更多