PHP pg_prepare() 表名作为参数

标签 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'] ));

这是失败的。有什么方法可以实现这一目标或解决这个问题的更好方法吗?

最佳答案

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

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

关于PHP pg_prepare() 表名作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65035907/

相关文章:

PHP关于单实例连接mysql

ruby-on-rails - 我可以执行原始 sql 查询,利用准备好的语句,而不使用 ActiveRecord::Relation::QueryAttribute 吗?

java - 如何查看 Prepared Statements SQL 字符串?

java - 嵌套事务理论上可用,但未使用

mysql - 来自子查询表的查询是否得到优化?

postgresql - 冲突时(UUid,date_trunc ('day',时间戳))

PHP PDO mysql_data_seek

javascript - 未从选择标签中获取所选项目

php - Mysql 查询不起作用?

php - 如何使用 PHP 和 MYSQL 在 UWP 中进行登录