我试图在我的一个mysql语句的select部分中传递一个变量但是没有得到所需的结果。下面是我的代码片段:
if(isset($_GET['send'])) {
$send='ra_dccr.'.$_GET['send'];
}
$query = $link->prepare("SELECT locale.id, locale.provider_num, locale.provider_name, :var as ccr
FROM `ra_dccr`
INNER JOIN `locale`
ON ra_dccr.id = locale.id
WHERE locale.report_record_num LIKE concat ('%',:recordnum,'%')
$query->bindParam(':var', $send, PDO::PARAM_STR);
$query->execute();
我的问题是ccr
显示为ra_dccr.{value of $send}
而不是在我获取结果时应从数据库中提取的实际值。我实际上是否允许在select语句中以这种方式使用变量?如何让sql以这种方式查找适当的列名。例如,如果send是ct_scan,它应该查找ra_dccr.ct_scan然后拉取val。
提前致谢
看到正在发生的事情的图像
答案 0 :(得分:1)
不,这是不可能的。参数用于将值传递给查询。这就是这里发生的事情:传递给:var
的值按字面返回。
如果要使用动态字段名称,请使用实际字段名称构建查询,而不使用绑定参数:
"SELECT locale.id, locale.provider_num, locale.provider_name, $send as ccr
执行此操作的最佳方法是首先验证$ _GET ['send']的值。也许你甚至可以根据允许的字段列入白名单。
if (!in_array($_GET['send'], array('field1', 'field3', 'field30'))) {
die('invalid field!');
}