作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
<分区>
假设在一个场景中:$ids = 2,3
。但由于某种原因,记录被返回为:$ids = 2
。
我相信从完整代码来看这一行有一些问题,因为当我回显 $ids
时,它返回 2,3
,但实际查询返回好像只有一个ID。 IE。它仅返回一门类(class)(ID 为 2)的事件。
$statement->execute(array("ids" => $ids, 'timestart' => $timestart, 'timeend' => $timeend))) {
我的完整代码:
$ids = array_map(function($item) { return $item->id; }, $entitlementsVOs);
$ids = implode(', ', $ids); //echo shows 2,3
$timestart = isset($_GET['start']) && $_GET['start'] != "" ? $_GET['start'] : null;
$timeend = isset($_GET['end']) && $_GET['end'] != "" ? $_GET['end'] : null;
$statement = $this->connection->prepare("SELECT name AS title, timestart AS start, timestart + timeduration AS end FROM event WHERE courseid IN(:ids) AND timestart >= :timestart AND timestart + timeduration <= :timeend");
$statement->setFetchMode(\PDO::FETCH_CLASS, get_class(new EventVO()));
if($statement->execute(array("ids" => $ids, 'timestart' => $timestart, 'timeend' => $timeend))) {
return $statement->fetchAll();
} else {
return null;
}
附注在 mysql workbench 中手动运行此查询会返回我的两条记录(一条来自类(class) ID 2,另一条来自类(class) 3),我在其中用 (2,3) 替换运算符,但在 php 执行中我只得到一条记录。
如果我在 php courseid IN(2,3)
中硬编码值,例如:
$statement = $this->connection->prepare("SELECT name AS title, timestart AS start, timestart + timeduration AS end FROM event WHERE courseid IN(2,3) AND timestart >= :timestart AND timestart + timeduration <= :timeend");
我得到了我所期望的结果,所以我相信 implode
、IN
运算符或 $statement->execute
存在一些问题>.
编辑:
我读过这个骗局,但我不知道从哪里开始使用命名占位符来完成相同的任务。我的问题是,当我同时使用命名参数和 IN 运算符时,受骗者仅将 IN 运算符与位置占位符一起使用。
编辑2
我读过第二个骗局,它不相关,我的问题混合使用了 IN 和命名占位符,链接的问题没有解决这个问题,但是,我现在在答案中找到了解决方案。
我是一名优秀的程序员,十分优秀!