【问题标题】:SQL Query: Multiple parameters for 1 columnSQL 查询:1 列的多个参数
【发布时间】:2019-10-17 18:54:36
【问题描述】:

我有这些数据库来保存一些活动。这就是它们之间的关系。

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 函数有问题,但我真的不知道是什么。

【问题讨论】:

  • ActivityDAO.php 第 15 行的内容似乎是错误的,并且您没有显示那里的内容......,顺便说一句,您的 sql 语句似乎缺少 WHERE
  • foreach ($dayparts as $key => $daypart) -> LINE 15

标签: php sql database filter foreach


【解决方案1】:

在...中为 foreach() 提供的参数无效

出现此错误是因为 foreach 尝试迭代的变量不是数组。

根据您的逻辑,$dayparts$weekdays 不为空(即!empty($dayparts) 为真)且$dayparts 也为真。

我建议在使用它们之前使用is_array($x) 来测试变量是否是数组:

if (is_array($dayparts)) {
    ...
}

【讨论】:

    猜你喜欢
    • 2014-08-22
    • 2011-09-12
    • 1970-01-01
    • 2011-12-26
    • 2013-04-28
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    • 2011-04-30
    相关资源
    最近更新 更多