这与我在这里提出的问题有点相关 (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...
答案 0 :(得分:1)
在预准备语句中,参数是一个常量值,将传递给查询,而不会影响查询的运行方式。这允许数据库准备"提前查询并弄清楚如何在不知道将使用的确切值的情况下执行它。
使用此定义,此类之类的查询没有任何参数,因此查询的PDO和非PDO版本看起来相同。你的工作(第一)例子和你一样好。事实上,我声称您的第一个示例实际上 是PDO版本。
要使用非数据库示例,预准备语句非常类似于PHP等编程语言中的函数。函数接受参数并使用它们的值,但(在正常情况下)参数不是将要运行的代码行。无论参数值是什么,都会运行相同的代码 - 函数代码本身不会被参数更改。
答案 1 :(得分:0)
没有。您不能将表名或列名绑定为参数。您只能将值绑定为参数。
在此处查看更多内容:Can PHP PDO Statements accept the table or column name as parameter?