有没有办法在 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?
和我这里问的问题有点关系
(
不工作的 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?