我有一个包含多个 orWhere 语句的查询。PHP 代码如下所示:
$firstDay = $params['datetimeForMonth']->format('Y-m-d');
$lastDay = $params['datetimeForMonth']->format('Y-m-t 23:59:59');
$whereStatement = "(s.level = ?
AND s.idForLevel IN (?)
AND s.startDatetime BETWEEN '$firstDay' AND '$lastDay')";
$q = Doctrine_Query::create()
->from('Mmb_Model_Schedule s')
->where($whereStatement, ['prefecture', $this->id])
->orWhere($whereStatement, ['district', $districtIds])
->orWhere($whereStatement, ['municipality', $municipalityIds])
->orWhere($whereStatement, ['workplace', $workplaceIds])
->orWhere($whereStatement, ['user', $userIds]);
变量 $districtIds、$municipalityIds、$workplaceIds 和 $userIds 都提前定义为逗号分隔值。
此查询在除地区 ID 之外的每个级别都可以正常工作。查询中不会返回任何具有“地区”级别的记录。
真正奇怪的是,如果我不使用绑定参数而是插入以下代码,一切正常:
->orWhere("s.level = 'district' AND s.idForLevel IN ($districtIds) AND s.startDatetime BETWEEN '$firstDay' AND '$lastDay'")
更令人气愤的是,即使这个查询作为一个单独的 where 语句(不包括所有其他语句)单独完成,如果我使用绑定参数,我也什么也得不到。
好像这还不够,我什至尝试更新表格,将'district'更改为'prefDistrict',以防万一'district'这个词引起问题。没有改变。
尽管我将 EXACT SAME 数据作为绑定参数插入,就像直接输入它们时一样,但行为发生了巨大变化。这到底是怎么回事?