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 查询。
我想将(来自数据库的)日期时间值与当前时间进行比较,并检查当前时间是在数据库中的值之前还是之后。这是在 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 查询。