Php 奇怪问题原则/符号请求

Php 奇怪问题原则/符号请求,php,mysql,symfony,doctrine-orm,Php,Mysql,Symfony,Doctrine Orm,我在一个简单的请求中遇到了一些麻烦,他们的行为非常奇怪: $villes = $this ->createQueryBuilder('v') ->getQuery() ->getResult(); foreach ($villes as $value) { $v = $this->_em->createQuery(' SELECT v FROM Btp\UserProBundle\Entity\Vil

我在一个简单的请求中遇到了一些麻烦,他们的行为非常奇怪:

$villes = $this
    ->createQueryBuilder('v')
    ->getQuery()
    ->getResult();

foreach ($villes as $value) {
    $v = $this->_em->createQuery('
        SELECT v
        FROM Btp\UserProBundle\Entity\Ville v
        WHERE GEO(v.lat = :latitude, v.lng = :longitude) <= :r
        ')
    ->setParameter('latitude', $lat)
    ->setParameter('longitude', $lng)
    ->setParameter('r', $value->getRayon()) // 20
    ->getResult();
    }
问题是,当我在setParam中为“r”硬编码20时,查询返回正确答案。 但是当我传递变量$value->getRayon时,这个变量也等于2 20,请求什么也找不到。我不明白怎么可能

编辑:查询生成的SQL:

string(341) "
    SELECT v0_.id AS id0, v0_.nom AS nom1, v0_.lat AS lat2, v0_.lng AS lng3, v0_.rayon AS rayon4, v0_.slug AS slug5, v0_.nb_pro AS nb_pro6
    FROM villes v0_ 
    WHERE ((ACOS(SIN(? * PI() / 180) * SIN(v0_.lat * PI() / 180) + COS(? * PI() / 180) * COS(v0_.lat * PI() / 180) * COS((? - v0_.lng) * PI() / 180)) * 180 / PI()) * 60 * 1.1515 * 1.609344) <= ?
"
EDIT2:好的,我用工具栏找到了这个查询,你们都是对的,占位符有很好的价值:

SELECT 
v0_.id AS id0, 
v0_.nom AS nom1, 
v0_.lat AS lat2, 
v0_.lng AS lng3, 
v0_.rayon AS rayon4, 
v0_.slug AS slug5, 
v0_.nb_pro AS nb_pro6 
FROM 
villes v0_ 
WHERE 
(
(
  ACOS(
    SIN(
      ? * PI() / 180
    ) * SIN(
      v0_.lat * PI() / 180
    ) + COS(
      ? * PI() / 180
    ) * COS(
      v0_.lat * PI() / 180
    ) * COS(
      (? - v0_.lng) * PI() / 180
    )
  ) * 180 / PI()
 ) * 60 * 1.1515 * 1.609344
) <= ?
Parameters: [44.8769806, 44.8769806, -0.5519386, 20] 

但任何结果都会被发现!!!当我用硬核写20的时候,那就行了!我不明白发生了什么…

好吧,这种奇怪的行为来自缓存/cookie。之前,我从数据库中进行了迁移,将字段rayon varchar更改为int。所以在清除缓存后,所有操作都正常工作

很抱歉打扰你这么愚蠢的回答


谢谢大家

你确定getRayon返回20吗?你是手动检查的吗?createQuery有一个getSQL方法——获取最终查询而不是结果,然后看看它们之间的区别。我像你说的那样尝试getSQL,实际上我做到了?而不是参数中的20。单击symfony调试工具栏右侧的db查询。它将向您显示sql查询以及?参数值。您发布的sql代码有四个占位符也有点令人费解,即?即使只有三个参数。无论如何,按照调试工具栏所示发布参数。关于:…WHERE GEOv.lat=:latitude,v.lng=:longitude setParameter1,$value->getRayon;