【问题标题】:How i set correctly addcslashes in my querybuilder我如何在我的查询构建器中正确设置 addcslashes
【发布时间】: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


【解决方案1】:
public function findByValue($value)
{
    $value = '%'.addcslashes($value, '%_').'%';
    return $this->createQueryBuilder('u')
        ->orWhere('u.name like :val1')
        ->orWhere('u.surname like :val2')
        ->orWhere('u.email like :val3')
        ->setParameter('val1', $value)
        ->setParameter('val2', $value)
        ->setParameter('val3', $value)
        ->getQuery()
        ->getResult();
}

【讨论】:

    猜你喜欢
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 2022-06-27
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2017-05-10
    • 1970-01-01
    相关资源
    最近更新 更多