【发布时间】: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函数。