我有一个小问题。我想通过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();
}
然后你会得到想要的结果