[英]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
限制,这只是数据库的工作方式)。 准备语句的工作方式 :
准备好的语句基本上是这样的:
- 准备:将创建一个SQL语句模板并将其发送到数据库。 某些未指定的值称为参数(标记为“?”)。 示例:INSERT INTO MyGuests VALUES(?,?,?)
- 数据库对SQL语句模板进行解析,编译和查询优化,并在不执行结果的情况下存储结果
- 执行:稍后,应用程序将值绑定到参数,然后数据库执行该语句。 应用程序可以使用不同的值多次执行该语句
因此,如果不知道要“使用”哪些列,则无法执行步骤2。
替代解决方案:您可以通过首先准备sql
字符串,然后解析它(prepared语句),然后绑定值来完成您想实现的目标
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.