Doctrine setParameter 总是产生“?”

Doctrine setParameter always produces "?"

我想将(来自数据库的)日期时间值与当前时间进行比较,并检查当前时间是在数据库中的值之前还是之后。这是在 Symfony 项目中完成的。我试着按照 instructions on the Symfony website.

所以我在存储库 Class 中编写了以下 Doctrine 查询,它检查用户锁定时间并检查它是否仍然存在于未来:

 $user_id = 1; // Just giving $user_id a value for this example     
 $qb = $this->createQueryBuilder('user')
        ->andWhere('user.lockout_time > :time')
        ->setParameter('time', date("Y-m-d H:i:s"))
        ->andWhere('user.user_id = :user_id')
        ->setParameter('user_id', $user_id);
    
 $query = $qb->getQuery();
 echo $query->getSQL();
 die;

当运行这个时,两个Where子句在比较值中都包含“?”(例如WHERE user.lockout_time > ?).显然我希望在查询中使用实际值。

最初我认为 date() 函数可能是问题所在,但即使我只使用 :user_id 我得到上面的错误。

如果我写 ->andWhere('user.user_id = 1') 我会得到想要的结果。

如果我将 :time 替换为格式为“Y-m-d H:i:s”的某个日期,我会收到消息“ 错误:字符串预期结束...”(...是 Hour 的值)。

所以我的两个 setParameter() 行都没有传递其中设置的值。我忽略了什么?

编辑: 建议的问题 here 不是重复的。这只是帮助我查看发送的查询。对准备这个问题很有帮助。

经过一些(=太多)时间的挖掘,这里是我自己的答案。

“?”是转义值,并不代表查询中的实际内容(这是上述 link 无济于事的另一个原因)。为了解决这个问题,我求助于监视 MySQL 通用日志。

Here how to get to it,如果有人有同样的问题。此日志显示 实际 SQL 查询。