繁体   English   中英

原则DBAL准备的查询

[英]Doctrine DBAL prepared query

我使用PHP原则DBAL,我想做的是一个get方法,如下所示:

function get($attr, $value){
    $conn = DriverManager::getConnection($params, $config);

    $sql = "SELECT * FROM mytable WHERE ? = ?";
    $statement = $conn->executeQuery($sql, array($attrs, $value));
    return $statement->fetchAll();        
}
get("id", 1);

但这不起作用。 我想知道是否有可能去除列以及值的参数化。 这是我正在使用的文档: http : //docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/data-retrieval-and-manipulation.html#executequery

不,这是不可能的。 您不能动态绑定列名(这不是doctrine / symfony限制,这只是数据库的工作方式)。 准备语句的工作方式

准备好的语句基本上是这样的:

  1. 准备:将创建一个SQL语句模板并将其发送到数据库。 某些未指定的值称为参数(标记为“?”)。 示例:INSERT INTO MyGuests VALUES(?,?,?)
  2. 数据库对SQL语句模板进行解析,编译和查询优化,并在不执行结果的情况下存储结果
  3. 执行:稍后,应用程序将值绑定到参数,然后数据库执行该语句。 应用程序可以使用不同的值多次执行该语句

因此,如果不知道要“使用”哪些列,则无法执行步骤2。

替代解决方案:您可以通过首先准备sql字符串,然后解析它(prepared语句),然后绑定来完成您想实现的目标

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM