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

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

和我这里问的问题有点关系 () 但这次列名是一个参数。

不工作的 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...

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

使用这个定义,像这样的查询没有任何参数,因此查询的 PDO 和非 PDO 版本看起来是一样的。您的工作(第一个)示例与您将要获得的一样好。事实上,我会声称您的第一个示例实际上 PDO 版本。

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

没有。您不能将 table 名称或列名称绑定为参数。您只能将值绑定为参数。

在此处查看更多信息:Can PHP PDO Statements accept the table or column name as parameter?