【发布时间】:2019-06-20 15:15:27
【问题描述】:
当我尝试在查询中引入 addcslashes 时,我的查询没有获取数据
我正在本地使用 xampp php 7.3.3 中的 symfony 4
public function findByValue($value)
{
$value = '%'.addcslashes($value, '%_').'%';
return $this->createQueryBuilder('u')
->orWhere('u.name = :val')
->orWhere('u.surname = :val')
->orWhere('u.email = :val')
->setParameter('val', $value)
->getQuery()
->getResult();
}
没有添加斜杠,查询可以正常工作,但它不能满足我的要求。
【问题讨论】:
-
如果你想使用通配符
%,我认为你需要写LIKE而不是=。 -
但我需要在我所写的地方获取数据,而不是在相同时获取数据
-
我不太明白你想要什么。如果您希望
%匹配零个、一个或多个字符,请使用LIKE;如果您希望%匹配%,请使用=。 -
另外,您不能重复使用相同的参数名称。将 :val 替换为 :name,:surname,:email。您可以使用 setParameter 将所有三个参数的值设置为相同的值,但它们需要不同的名称。而且我发现您实际上不太可能使用 addcslashes。我认为您可能会将其与旧式 sql 转义混淆。
-
@Cerad 我认为使用 addcslashes 是合法的,所以
WHERE email LIKE "%some_user%"得到了_转义。在原则上重用相同的参数名称效果很好。 (可能是一个设置,但对我有用)
标签: php symfony controller doctrine