有没有办法在 UPDATE 查询中将 PDO 与动态列名一起使用


Is there a way to use PDO with a dynamic column name in an UPDATE query?

这与我在这里问的问题有点相对(PDO将撇号添加到mySQL查询中)但这次列名是一个参数。

不工作的PDO示例如下所示:

"UPDATE tbl SET :COL1 = NOT :COL1;"

确定这样的解决方案:

"UPDATE tbl SET $COL1 = NOT $COL1;" // works (but it's not PDO)

但是为什么

"UPDATE tbl SET $COL1 = NOT :COL1;" // does not ??

"UPDATE tbl SET $COL1 = :VAL_COL1;" // is ok if I first get and negate COL1 value...

在预准备语句中,参数是一个常量值,它将传递到查询中,而不会影响查询的运行方式。这允许数据库提前"准备"查询,并弄清楚它将如何执行,即使不知道将使用的确切值。

使用此定义,此类查询没有任何参数,因此查询的 PDO 和非 PDO 版本看起来相同。你的工作(第一个)例子和你将要得到的一样好。事实上,我会声称你的第一个例子实际上是PDO版本。

使用非数据库示例,预准备语句非常类似于编程语言(如 PHP)中的函数。函数接受参数并使用其值,但(在正常情况下)参数不是将要运行的代码行。无论参数值是什么,都会运行相同的代码 - 函数代码本身不会被参数更改。

No. 不能将表名或列名绑定为参数。 只能将值绑定为参数。

在此处查看更多内容:PHP PDO 语句是否可以接受表或列名作为参数?