当我不得不根据<select>
元素的值更改查询中的表时,我遇到了类似的问题。在这里的大多数答案中都说表名不能作为绑定变量传递,但是当我创建一个包含表名并传递给我的 sql 查询的变量时,它实际上起作用了:
<?php
$conn = mysqli_connect("<host>", "<username>", "<password>", "<database>");
$variable = "table_name";
$sql = $conn->("SELECT <column_name> FROM $variable ....);
?>
所以我所做的是我创建了一个函数并在我的函数中编写了所有的 sql 查询。对于函数参数,我传递了名为 $table 的变量:
function getResult($table){
$conn = mysqli_connect("<host>", "<username>", "<password>", "<database>");
$minDate = $conn->real_escape_string($_POST['minDate']);
$maxDate = $conn->real_escape_string($_POST['maxDate']);
$jobName = $conn->real_escape_string($_POST['jobName']);
$sql = $conn->query("SELECT COUNT(countX) as boxCount FROM $table WHERE job_name='$jobName' AND dateX BETWEEN '$minDate' AND '$maxDate'");
/* ... I removed the other operations from the code to make it compact */
然后我编写了根据作业名称的值更改目标表的条件:
if ($_POST['jobName'] === "job1"){
getResult("table_name");
}
else if($_POST['jobName'] === "job2") {
getResult("table_name");
}