【问题标题】:MYSQL / PHP TWO Multiselect Dropdown Filters (PDO)MYSQL / PHP 两个多选下拉过滤器(PDO)
【发布时间】:2017-11-07 02:32:36
【问题描述】:

我得到的错误如下:(我也在回显查询语句)

注意:第 75 行 /home/fanati10/public_html/wp-content/themes/digital-pro/page-nflwranalyzer.php 中的数组到字符串转换

注意:第 79 行 /home/fanati10/public_html/wp-content/themes/digital-pro/page-nflwranalyzer.php 中的数组到字符串转换
*SELECT * FROM WR_TeamAnalyzer WHERE TMID = ? AND WKID = ?*

这是我的 php 文件

  if(isset($_POST['submit']))
  {
      require_once( get_stylesheet_directory() . '/config/config.php' );
      if(isset($_POST['check'])) {
        $nflposs = "";
        foreach($_POST['check'] as $val => $text_field) {
          $nflposs.=$text_field.", ";
       }
          $nflpossint = rtrim($nflposs, ', ');
          $nflposs = explode(',', $nflpossint);
          $placeholders = rtrim(str_repeat('?, ', count($nflposs)), ', ');
          $filter[] = "TMID = $placeholders";
          $values[] = $nflpossint;
      }
       if(isset($_POST['wk'])) {
        $wkid = "";
        foreach($_POST['wk'] as $val => $text_field) {
          $wkid.=$text_field.", ";
       }
          $wkidint = rtrim($wkid, ', ');
          $wkid = explode(',', $wkidint);
          $placeholders2 = rtrim(str_repeat('?, ', count($wkid)), ', ');
          $filter[] = "WKID = $placeholders2";
          $values[] = $wkidint;
      }
      $sql="SELECT * FROM WR_TeamAnalyzer WHERE " . implode(' AND ', $filter);
      echo ($sql);
      $selectStmt = $dbcon->prepare($sql);
      $selectStmt->execute($values);
      $rows = $selectStmt->fetchAll();
  $tableContent = '';
  foreach ($rows as $row){
    $tableContent = $tableContent.'<tr>'.

【问题讨论】:

  • 当我打印数组时,我得到 print_r($filter);数组 ( [0] => TMID = ? [1] => WKID = ?, ? ) print_r($values);数组 ( [0] => 3 [1] => 3, 4 )

标签: php mysql arrays pdo filtering


【解决方案1】:

当您在查询中使用= 时,它将需要一个字符串。但是您在参数中传递了一个数组 (values)。我不确定您要在这里实现什么,但如果您想签入一个数组,请在代码中更改这两行,如下所示:

TMID IN $placeholders
WKID IN $placeholders2

您的最终查询应如下所示:

SELECT * FROM WR_TeamAnalyzer WHERE TMID IN (?) AND WKID IN (?)

【讨论】:

  • 您发布的内容仍然只允许按每列一个选项进行过滤......所以基本上根据您的回答,查询看起来像这样............ ...................... $sql="SELECT * FROM WR_TeamAnalyzer WHERE TMID IN (1) AND WKID IN (2)";
  • 我想要的是过滤每个下拉列表中的多个选择的查询.....在这里我手动输入了我希望它如何过滤的查询...... ................................ $sql="SELECT * FROM WR_TeamAnalyzer WHERE TMID IN (1, 2) AND WKID IN ( 2, 3)";
【解决方案2】:

这是我想出来的

改变:

$filter[] = "TMID IN $placeholders";
$values = $nflpossint;

&

$filter[] = "WKID IN $placeholders2"; 
$values2 = $wkidint;

&

$sql="SELECT * FROM WR_TeamAnalyzer WHERE TMID IN ($values) AND WKID IN ($values2)";
$selectStmt = $dbcon->prepare($sql);
$selectStmt->execute();

【讨论】:

  • 甚至不需要 $filter[](s)
猜你喜欢
  • 2012-04-19
  • 1970-01-01
  • 2013-04-06
  • 1970-01-01
  • 2019-01-17
  • 2017-01-16
  • 1970-01-01
  • 1970-01-01
  • 2016-07-29
相关资源
最近更新 更多