繁体   English   中英

如何在单个sql查询中获取失败的条件

[英]How to get which condition has failed if any in a single sql query

这可能是奇怪的,也可能不是。。。但是我需要找出3个条件中有哪个失败了...
我解释...
在我的查询中,如果所有条件都正常,那么我有3个条件,但是没有问题,但是如果其中一个条件失败,则我需要知道哪个条件或多个条件失败,以便我可以建立适当的响应...
例:

if(strlen($k) == 16 && filter_var($em, FILTER_VALIDATE_EMAIL)) {
        $con = $c->Con();
        $q = $con->query("SELECT COUNT(*) FROM table WHERE v = '$k' AND ema = '$em' AND ve = '0'");
        $r = $q->fetch_row();
        if($r > 0) { $q = $con->query("UPDATE table SET ve = '1' WHERE v = '$key' AND emails = '$em'");
            if($q){
                $mss = 'Ready'; // MS 1
            }
        } else {
            $mss = 'It was ready'; // MS 2
        }
    } else {
        $mss = 'Something is wrong!'; // MS 3
    }

所以第一个查询有3个条件,如果一切都OK,然后转到下一个“查询”,但是,我怎么知道其中一个条件失败?...如果[v]不匹配,或者如果电子邮件,该怎么办?不匹配或ve不匹配...那样我可以在MS 2上显示正确的消息...而不是一般消息...
如果v不等于$ k,则$ mss ='您的密钥不匹配';
如果电子邮件不等于$ ema,则$ mss ='您的电子邮件没有资金';
如果ve不等于0,则$ mss ='您的密钥没有值';

问题是我想使其尽可能短而整洁,我可以针对每个条件进行单独的查询,这是一种懒惰的方法,但是有效...

我可以提出一个笨拙的解决方案,主要将工作转移到PHP。

  1. 更改查询以使用OR选择行。 返回可能的行集。

SELECT v, ema, ve FROM table WHERE v = '$k' OR ema = '$em' OR ve = '0';

  1. 现在,通过此结果集检查条件。

伪码

while( $row = fetch_row($result) ){
  if( 1 and 2 and 3 ){
    //SUCCESS
  }
  elseif( NOT 1 ){
    //1 is the problem
  }
  elseif( NOT 2 ){
    //2 is the problem
  }
  elseif( NOT 3 ){
    //3 is the problem
  }
}

1,2,3是条件(例如1 =($ row ['v'] == $ k))

您必须弄清楚如何处理多行,理想情况下,架构可以避免这种情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM