php - SQL 查询:1 列的多个参数
问题描述
我有这些数据库来保存一些活动。这就是它们相互关联的方式。
ACTIVITIES WEEKDAYS DAYPARTS
id id id
title weekday daypart
daypart_id
weekday_id
对于过滤器按钮,我想过滤工作日的活动。例如,他们点击星期一,他们会得到星期一的所有活动。
问题是一栏可以获取多个参数,比如可以点击周一,但也可以点击周二,周三..等等。
我尝试用这段代码做到这一点:
public function selectAllActivities($dayparts = false, $weekdays = false){
$sql = "SELECT `activities`.*, `dayparts`.`daypart`, `weekdays`.`weekday`
FROM `activities`
INNER JOIN `dayparts` ON `dayparts`.`id` = `activities`.`daypart_id`
INNER JOIN `weekdays` ON `weekdays`.`id` = `activities`.`weekday_id`";
if (!empty($dayparts)) {
$placeHolders = [];
foreach ($dayparts as $key => $daypart) {
$placeHolders[$key] = ':daypart_id'.$key;
}
$sql .= ' AND `daypart` IN ('.implode(', ',$placeHolders).')';
}
if (!empty($weekdays)) {
$placeHolders = [];
foreach ($weekdays as $key => $weekday) {
$placeHoldersB[$key] = ':weekday_id'.$key;
}
$sql .= ' AND `weekday` IN ('.implode(', ',$placeHoldersB).')';
}
$stmt = $this->pdo->prepare($sql);
if ($dayparts) {
foreach ($dayparts as $key => $daypart) {
$stmt->bindValue($placeHolders[$key], $daypart);
}
}
if ($weekdays) {
foreach ($weekdays as $key => $weekday) {
$stmt->bindValue($placeHoldersB[$key], $weekday);
}
}
$stmt->execute();
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
当我尝试过滤时,出现以下错误:
Invalid argument supplied for foreach() in /Applications/MAMP/htdocs/INT2_DEV/dao/ActivityDAO.php on line 15
foreach 函数有问题,但我真的不知道是什么。
解决方案
在...中为 foreach() 提供的参数无效
发生此错误是因为尝试迭代的变量foreach
不是数组。
根据您的逻辑,要么$dayparts
或$weekdays
不为空(即为!empty($dayparts)
真)而且$dayparts
为真。
我建议is_array($x)
在使用它们之前使用来测试变量是否是数组:
if (is_array($dayparts)) {
...
}
推荐阅读
- typescript - React-Native 将类型化类包装到功能组件中以进行样式设置
- pine-script - 在 TradingView 中获取周期范围
- c++ - C++ 中的 make_pair()
- java - 我如何返回一个 jsp 作为来自这个 servlet 的响应?
- woocommerce - 在 ionic 4 应用程序中实现 Razorpay 订单 API?
- javascript - Multikeypress不能正常工作唱JS
- java - org.codehaus.jackson.JsonParseException:响应元素中无法识别的字段'_transferSize',同时通过java读取HAR文件
- javascript - PHP - 创建指定文件夹的目录列表
- c# - Selenium C#如何查找图像的元素?
- git - 'git log' 是否使用深度优先搜索遍历来显示提交?