有没有办法在UPDATE查询中使用带有动态列名的PDO?

时间:2015-01-16 22:56:35

标签: php mysql pdo

这与我在这里提出的问题有点相关 (PDO adds the apostrophe to the mySQL 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...

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

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