选择吗?FROM table WHERE id = ?不能正常工作


SELECT ? FROM table WHERE id = ? not working correctly

我有一个小问题。我想通过mysqli查询从数据库中获取特定信息:

public function get_searchorder_single_information($soid, $information) {
        global $mysqli;
        $stmt = $mysqli->prepare("SELECT ? FROM pr_hr_searchorders WHERE id = ?");
        $stmt->bind_param('si', $information, $soid);
        $stmt->execute();
        $stmt->bind_result($result);
        $stmt->fetch();
        echo $result;
        $stmt->close();
    }

在我的例子中,$information被设置为'job',但它也可以有其他值(例如:"工资")。当我尝试用这个变量使用我的查询时,echo输出只是"job",而不是保存在我的数据库中的值。当我写job而不是the ?, echo输出正确的值。

所以现在我可以为我搜索的每个信息创建一个函数,但这将以意大利面条式的代码结束。所以我问你是否有可能使用我的搜索查询,就像上面的正确输出。我该怎么做呢?

提前感谢并为我糟糕的英文写作感到抱歉。

阅读文档:http://php.net/manual/en/mysqli.prepare.php

标记仅在SQL语句中的某些地方是合法的。为例如,它们在INSERT语句的VALUES()列表中是允许的(为一行指定列值),或与列进行比较在WHERE子句中指定比较值。然而,事实并非如此允许在select中使用标识符(如表或列名)列出要由SELECT语句返回的列的名称,或指定二元操作符(如= equal)的两个操作数的迹象。后一种限制是必要的,因为它将是无法确定参数类型。这是不允许的将标记与NULL比较?也是空的。一般来说,参数是仅在数据操作语言(DML)语句中合法,而在数据定义语言(DDL)语句。

修改代码:

$stmt= $mysqli->prepare("SELECT $information FROM pr_hr_searchorders WHERE id = ?");
$stmt->bind_param('i', $soid);

将代码改为

public function get_searchorder_single_information($soid, $information) {
        global $mysqli;
        $query = "SELECT".$information." FROM pr_hr_searchorders WHERE id = ?"
        $stmt = $mysqli->prepare($query);
        $stmt->bind_param('si', $soid);
        $stmt->execute();
        $stmt->bind_result($result);
        $stmt->fetch();
        echo $result;
        $stmt->close();
    }

然后你会得到想要的结果