在Select语句的部分中使用绑定参数

时间:2015-05-26 23:30:41

标签: php mysql

我试图在我的一个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。

提前致谢

看到正在发生的事情的图像

Output

1 个答案:

答案 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!');
}