select 查询中作为列名的变量

Variable as column name in select query

我想 select 列中包含的名称与我的变量 $column_id 同名,我将其传递给下面显示的函数。它已正确传递,但没有在其周围放置 '' 查询会导致错误。如果我把它们放在 select 的结果是 $column_id 本身的值,这是错误的。 (语法等于准备好的查询的语法,因为这是下一步,如果我能解决这个问题的话)

$nirk2 = $this->conn->prepare("SELECT '" .$column_id. "' FROM t_values WHERE device_id='".$device_id."'");
$nirk2->execute(); 
$nirk2->bind_result($Value_Description);
$nirk2->fetch();

我想做的基本上就是使用我的变量 $column_id 作为列的名称来搜索值。

如果您想使用字符串作为列名,您需要确保该列实际存在(已列入白名单),然后使用反引号将其包裹起来。

// whitelist column name
if(!in_array($column_id, ['my_col 1', 'my_col 2'])){
    throw new \Exception('Invalid column name!');
}
//                              V    backticks   V
$nirk2 = $conn->prepare("SELECT `" .$column_id. "` FROM t_values WHERE device_id=?");
$nirk2->bind_param('s', $device_id);
$nirk2->execute(); 
$nirk2->bind_result($Value_Description);
$nirk2->fetch();