首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为表名bindValue?

如何为表名bindValue?
EN

Stack Overflow用户
提问于 2013-02-02 18:55:55
回答 1查看 4.5K关注 0票数 1

可以为表名做一个绑定值吗?如果我删除:table并添加表名称,那么第二个2绑定基本上可以正常工作,但是我想将它用于同一表单中的多个表。

表单上的表的字段是根据上一次查询的结果定义的,因此表名称在表单上的值中显示为$table,该值正确显示,因此这应该会将$table的值发布到表绑定?

代码语言:javascript
复制
try {
    $sql = 'UPDATE :table SET
                archive = :archive
                WHERE id = :id';
    $s = $pdo->prepare($sql);
    $s->bindvalue('table', $_POST['table']);
    $s->bindvalue('archive', $_POST['archive']);
    $s->bindvalue('id', $_POST['id']);
    $s->execute();
}
EN

回答 1

Stack Overflow用户

发布于 2013-08-11 14:54:10

由于预准备语句比sprintf多“一点”,因此通过变量设置表是没有意义的。

在设置实际值之前,会将准备好的语句传递给DB。所以DB可能会寻找一种如何回答查询的方法。在此准备之后,设置所搜索的实际值。当调用execute()时,查询将得到应答。

因此,为了准备“一种如何回答查询的方法”(正如我所说的),表名是一个重要信息。这就是为什么将其作为变量传递是没有意义的。这也是它不起作用的原因。

因此,您必须字符串连接表名:

代码语言:javascript
复制
$sql = 'UPDATE '. $table .' SET
            archive = :archive
            WHERE id = :id';

正如@zerkms建议的那样,您应该将可能的表名列在白名单中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14661136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档