doctrine2 dql,使用setParameter与%通配符进行类似的比较 [英] doctrine2 dql, use setParameter with % wildcard when doing a like comparison

查看:165
本文介绍了doctrine2 dql,使用setParameter与%通配符进行类似的比较的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用参数占位符 - 例如?1 - 使用%通配符。就是这样:u.name LIKE%?1%(虽然这会引发错误)。该文档有以下两个示例:
1。

I want to use the parameter place holder - e.g. ?1 - with the % wild cards. that is, something like: "u.name LIKE %?1%" (though this throws an error). The docs have the following two examples: 1.

// Example - $qb->expr()->like('u.firstname', $qb->expr()->literal('Gui%'))
public function like($x, $y); // Returns Expr\Comparison instance

我不喜欢这样,因为没有防止代码注入的保护。

I do not like this as there is no protection against code injection.

2。

// $qb instanceof QueryBuilder

// example8: QueryBuilder port of: "SELECT u FROM User u WHERE u.id = ?1 OR u.nickname LIKE ?2 ORDER BY u.surname DESC" using QueryBuilder helper methods
$qb->select(array('u')) // string 'u' is converted to array internally
   ->from('User', 'u')
   ->where($qb->expr()->orx(
       $qb->expr()->eq('u.id', '?1'),
       $qb->expr()->like('u.nickname', '?2')
   ))
   ->orderBy('u.surname', 'ASC'));

我不喜欢这个,因为我需要搜索对象属性中的术语 - 也就是说,我需要任何一方的通配符。

I do not like this because I need to search for terms within the object's properties - that is, I need the wild cards on either side.

推荐答案

当绑定参数到查询时,DQL几乎完全像PDO(这是什么Doctrine2在引擎盖下使用)。

When binding parameters to queries, DQL pretty much works exactly like PDO (which is what Doctrine2 uses under the hood).

所以当使用LIKE语句时,PDO将关键字和%通配符都视为单个标记。您不能在占位符旁边添加通配符。绑定参数时,必须将它们附加到字符串。

So when using the LIKE statement, PDO treats both the keyword and the % wildcards as a single token. You cannot add the wildcards next to the placeholder. You must append them to the string when you bind the params.

$qb->expr()->like('u.nickname', '?2')
$qb->getQuery()->setParameter(2, '%' . $value . '%');

看到这个评论在PHP手册中。希望有帮助。

See this comment in the PHP manual. Hope that helps.

这篇关于doctrine2 dql,使用setParameter与%通配符进行类似的比较的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆