当前位置:  开发笔记 > 数据库 > 正文

参数化SQL列?

如何解决《参数化SQL列?》经验,为你挑选了1个好方法。

我有一些代码利用参数化查询来防止注入,但我还需要能够动态构造查询,而不管表的结构如何.这样做的正确方法是什么?

这是一个例子,说我有一个表名列,地址,电话.我有一个网页,我在其中运行显示列并使用它们作为选项填充选择下拉列表.

接下来,我有一个名为Search的文本框.此文本框用作参数.

目前我的代码看起来像这样:

result = pquery('SELECT * FROM contacts WHERE `' + escape(column) + '`=?', search);

不过,我从中得到了一种icky的感觉.我使用参数化查询的原因是为了避免使用转义.此外,转义可能不是为逃避列名而设计的.

我怎样才能确保这个按照我的意图运作?

编辑: 我需要动态查询的原因是架构是用户可配置的,我不会修复任何硬编码的东西.



1> zigdon..:

不要传递列名,只需使用硬编码表传递代码将转换为列名的标识符.这意味着您无需担心传递恶意数据,因为所有数据都是合法翻译的,或者已知无效.Psudoish代码:

@columns = qw/Name Address Telephone/;
if ($columns[$param]) {
  $query = "select * from contacts where $columns[$param] = ?";
} else {
  die "Invalid column!";
}

run_sql($query, $search);

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有