我是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
答案 0 :(得分:0)
不,这是不可能的。您无法动态绑定列名称(这不是doctrine
/ symfony
限制 - 它只是数据库的工作方式)。
准备陈述works的方式:
准备好的陈述基本上是这样的:
- 准备:创建SQL语句模板并将其发送到数据库。某些值未指定,称为参数 (标有"?")。示例:INSERT INTO MyGuests VALUES(?,?,?)
- 数据库在SQL语句模板上解析,编译和执行查询优化,并存储结果而不执行它
- 执行:稍后,应用程序将值绑定到参数,数据库执行该语句。应用程序 可以根据需要多次执行语句 值
醇>
因此,如果不知道要使用哪些列,就不能执行第2步"使用"。
替代解决方案:
您想要实现的目标可以通过先准备sql
字符串,然后解析它(准备好的语句)然后绑定值