我正在尝试将此查询从普通的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'] ));

这是失败的。有什么方法可以解决这个问题,或者有更好的解决方案?

最佳答案

不,您不能绑定(bind)标识符,只能绑定(bind)值。

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

09-10 00:58