gpt4 book ai didi

php - 带有命名占位符的 PDO 准备语句 IN 子句不能按预期工作

转载 作者:搜寻专家 更新时间:2023-10-30 20:38:41 24 4
gpt4 key购买 nike

<分区>

假设在一个场景中:$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");

我得到了我所期望的结果,所以我相信 implodeIN 运算符或 $statement->execute 存在一些问题>.

编辑:

我读过这个骗局,但我不知道从哪里开始使用命名占位符来完成相同的任务。我的问题是,当我同时使用命名参数和 IN 运算符时,受骗者仅将 IN 运算符与位置占位符一起使用。

编辑2

我读过第二个骗局,它不相关,我的问题混合使用了 IN 和命名占位符,链接的问题没有解决这个问题,但是,我现在在答案中找到了解决方案。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com