Doctrine DBAL准备了查询

时间:2015-08-17 10:50:37

标签: php doctrine prepared-statement dbal

我是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

1 个答案:

答案 0 :(得分:0)

不,这是不可能的。您无法动态绑定列名称(这不是doctrine / symfony限制 - 它只是数据库的工作方式)。 准备陈述works的方式:

  

准备好的陈述基本上是这样的:

     
      
  1. 准备:创建SQL语句模板并将其发送到数据库。某些值未指定,称为参数   (标有"?")。示例:INSERT INTO MyGuests VALUES(?,?,?)
  2.   
  3. 数据库在SQL语句模板上解析,编译和执行查询优化,并存储结果而不执行它
  4.   
  5. 执行:稍后,应用程序将值绑定到参数,数据库执行该语句。应用程序   可以根据需要多次执行语句   值
  6.   

因此,如果不知道要使用哪些列,就不能执行第2步"使用"。

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

来完成。