PHP pg_prepare()表名作为参数

时间:2016-04-22 06:30:36

标签: php postgresql prepared-statement

我试图将此查询从普通pg_query()转换为pg_prepare() & pg_execute()。它是一个通用查询,当我需要从不同页面更新不同的表以便保持我的代码清洁时,我重复使用它。

我刚刚意识到参数只能在where子句中使用,而不能在查询的其他部分使用。

$res = pg_query($con, "update " .  $_REQUEST['table'] . " set " . $_REQUEST['colname'] . "=" . $colval . " where " . $_REQUEST['colnameid'] . "=" . $_REQUEST['colvalid'] . " returning " . $_REQUEST['colnameid'] );

试过这段代码:

$res = pg_prepare($con, "upd", "update $1 set $2=$3 where $4=$5 returning $6");

$res = pg_execute($con, "upd", array($_REQUEST['table'],$_REQUEST['colname'],$colval,$_REQUEST['colnameid'],$_REQUEST['colvalid'],$_REQUEST['colnameid'] ));

这是失败的。有没有办法实现这个或更好的解决这个问题的方法?

1 个答案:

答案 0 :(得分:1)

不,你不能绑定标识符,只能绑定值。

标识符(表名,字段名等)首先不应该是用户输入。以这种方式处理它们是一个非常糟糕的主意。