如何在 PDO 语句中对表名进行参数化? [复制]

Posted

技术标签:

【中文标题】如何在 PDO 语句中对表名进行参数化? [复制]【英文标题】:How to do parametrize the table name in a PDO statement? [duplicate] 【发布时间】:2013-10-24 15:34:12 【问题描述】:

问题

在运行 表名 参数化的 PDO 语句时,我遇到 PDO 语法错误,例如

$sql = 'DELETE FROM :table_name';
$query = $this->db->prepare($sql);
$query->execute(array(':table_name' => "mytable"));

我可以用 SELECT 等重现问题,所以这是一个普遍问题。 我试着用反引号写它,前面有数据库名称,两者的组合等等,没有任何效果。

问题

如何做到这一点?

【问题讨论】:

【参考方案1】:

您不能参数化表名、列名或IN 子句中的任何内容(必须单独绑定)。见this评论php.net。

另见:Can PHP PDO Statements accept the table or column name as parameter?

【讨论】:

我认为您可以在 IN 子句中使用绑定参数,只要您单独绑定每个参数?即IN (?) 不起作用,但IN (?, ?, ?) 应该。 @andrewsi:你是对的。我已经更新了答案以避免混淆。 是否有 PDO 维护者可以解决此问题?这是一个非常常见的问题,由于缺乏官方方法,解决方案总是令人担忧。【参考方案2】:

您不能使用 PDO 和 mysqli 准备语句对表名进行参数化,因为 SQL Server 在执行实际查询之前需要基本信息来准备查询。

【讨论】:

以上是关于如何在 PDO 语句中对表名进行参数化? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PHP 中为动态查询构建参数化 PDO 语句?

在带有 PDO 的 PHP 中,如何检查最终的 SQL 参数化查询? [复制]

在带有 PDO 的 PHP 中,如何检查最终的 SQL 参数化查询? [复制]

PHP PDO 语句可以接受表名或列名作为参数吗?

mysql中对表操作----为所有列插入数据

如何正确使用 PDO 对象进行参数化 SELECT 查询