【问题标题】:The sql query should select all rows if variables $whereEmail and $whereNotEmail are empty or null如果变量 $whereEmail 和 $whereNotEmail 为空或 null,则 sql 查询应选择所有行
【发布时间】:2017-05-11 17:08:51
【问题描述】:

如果变量 $whereEmail 或变量 $whereNotEmail 或两者都为空,则以下查询不会选择任何行。

$whereEmail = "'abc@gmail.com','def@hotmail.com'";
$whereNotEmail = "'u2u@xyz.com','u3u@xyz.com'";
$result = $mSearch->dao->query(sprintf('
SELECT * FROM table
WHERE email IN (%s)
AND email NOT IN (%s)
', $whereEmail, $whereNotEmail ));

变量 $whereEmail 和 $whereNotEmail 中的电子邮件地址使用 php 函数存储,在某些情况下它们为空或 null。

我希望如果变量 $whereEmail 和 $whereNotEmail 都是空的,查询应该选择表中的所有行。

同样,我希望如果变量 $whereEmail 为空,则查询应选择表中的所有行,但电子邮件地址位于变量 $whereNotEmail 中的行除外。

同样,我希望如果变量 $whereNotEmail 为空,查询应该选择电子邮件地址在变量 $whereEmail 中的所有行。

【问题讨论】:

    标签: php mysql sql mysqli


    【解决方案1】:

    // 你必须设置 whereEmail 不为空并且希望 whereNotEmail 可以工作的条件

    $whereEmail = "'abc@gmail.com','def@hotmail.com'";
    $whereNotEmail = "'u2u@xyz.com','u3u@xyz.com'"; 
    if($whereEmail != ''){
    $result = $mSearch->dao->query(sprintf('
    SELECT * FROM table
    WHERE email IN (%s)
    ', $whereEmail ));
    }else{
    $result = $mSearch->dao->query(sprintf('
    SELECT * FROM table
    WHERE email NOT IN (%s)
    ', $whereNotEmail ));
    }
    

    【讨论】:

      【解决方案2】:

      我希望变量 $whereEmail 和 $whereNotEmail 都是 清空查询应该选择表中的所有行。

      不,查询理解 SQL 语言结构而不是 PHP,因此您必须检查并执行相应的操作。如果我是你,那么将验证两个列表是否为空。如果为空,则弹出一条验证消息,否则可能会将其传递给查询。 (OR) 如果列表中的任何一个为空,那么您也可以从查询中放弃该条件。

      【讨论】:

      • @Syed,不,不会,因为这是检查 SQLParameter 而不是 PHP 变量。你明白其中的区别吗?
      • 不行,可以把PHP变量转换成SQL参数吗?
      • @Syed,简单的回答:不
      【解决方案3】:

      如果我理解正确,您可以尝试以下方法:开始构建一个查询,选择所有行并在这些电子邮件数组不为空时添加条件

          $whereEmail = array('abc@gmail.com','def@hotmail.com');
          $whereNotEmail = array('u2u@xyz.com','u3u@xyz.com');
      
          $query = 'SELECT * FROM `table` WHERE 1';
          if(!empty($whereEmail)) {
                  $validEmailsString = implode('","', $whereEmail);
                  $query .= ' AND email IN ("'.$validEmailsString.'")';
          }
      
          if (!empty($whereNotEmail)) {
                  $invalidEmailsString = implode('","', $whereNotEmail);
                  $query .= ' AND email NOT IN ("'.$invalidEmailsString.'")';
          }
      
          print $query;
      
          $result = $mSearch->dao->query($query);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-06
        • 1970-01-01
        • 2013-06-21
        • 1970-01-01
        • 2013-11-26
        相关资源
        最近更新 更多