我有一个小问题。我想通过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',但它也可以包含其他值(例如' salary')。当我尝试将此查询与此变量一起使用时,回显输出只是“工作”'而不是我的数据库中保存的值。当我写“工作”时而不是'?',echo输出正确的值。
所以现在我可以为我搜索的每个信息创建一个函数,但这会以意大利面条代码结束。所以我问你是否有可能使用我上面的搜索查询和正确的输出。我该怎么做?
提前致谢并抱歉我的英文写得不好。
答案 0 :(得分:-1)
阅读文档:http://php.net/manual/en/mysqli.prepare.php
标记仅在SQL语句的某些位置是合法的。对于 例如,它们被允许在INSERT语句的VALUES()列表中 (指定行的列值),或与列进行比较 在WHERE子句中指定比较值。但是,他们不是 在select中允许标识符(例如表名或列名) 用于命名SELECT语句要返回的列的列表,或 指定二元运算符的两个操作数,例如= equal 标志。后一种限制是必要的,因为它会 无法确定参数类型。这是不允许的 将标记与NULL比较?也是NULL。通常,参数是 仅在数据操作语言(DML)语句中合法,而不在 数据定义语言(DDL)语句。
修改您的代码:
$stmt= $mysqli->prepare("SELECT $information FROM pr_hr_searchorders WHERE id = ?");
$stmt->bind_param('i', $soid);
答案 1 :(得分:-2)
将您的代码更改为
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();
}
然后您将获得所需的结果
答案 2 :(得分:-4)
尝试这样的事情:
if(!($stmt = $mysqli->prepare("SELECT ? FROM pr_hr_searchorders WHERE id = ?"))){
echo "Prepare failed: (". $mysqli->errno. ") " . $mysql->error;
}
并且对于绑定也是:
if(!$stmt->bind_param("si", $information, $soid)){
echo "Binding parameters failed: (" . $stmt->errno. ") ". $stmt->error;
}
也许这会给你更多信息。