代码之家  ›  专栏  ›  技术社区  ›  derobert

如何将DBD::Proxy与DBIx::Class一起使用?

  •  1
  • derobert  · 技术社区  · 17 年前

    我需要通过防火墙建立数据库连接,并限制可以运行的查询。DBD:代理似乎是解决这个问题的完美方案。然而,我目前正在使用DBIx::Class,无法弄清楚如何将它们连接在一起。

    特别是,DBD::Proxy不接受SQL;它接受特定的命名查询。但是DBIx::Class似乎没有方法调用这些命名查询。

    这是在基于Catalyst的Web应用程序中。

    1 回复  |  直到 17 年前
        1
  •  1
  •   Len Jaffe    17 年前

    DBD::代理不接受SQL。为了方便起见,它允许命名查询。

    将DBIx::Class与DBD::Proxy命名的查询一起使用没有方便的方法,因为DBIx::Class对象关系映射器(ORM)的目的是呈现SQL数据操作语言(DML)语句的面向对象视图。DBD::Proxy的命名查询功能不是DML语句,因此DBIx::Class没有满足您需求的功能:将文字字符串直接传递给DBD::代理驱动程序的prepare()函数。

    一些不方便的方式:

    1. 不要使用DBIx::Class。只需在DBI中执行即可。您可以使用Catalyst::Model::DBI,或简单的DBI+Catalyst:;Model::Adaptor+您自己的模型类。

    2. 不要使用命名查询。这意味着,如果您计划使用命名查询来控制对数据库的访问,那么您需要移动查询授权 根据您构建应用程序的方式,将逻辑添加到对控制器或模型内的数据库进行调用的代码中。