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

时间:2015-07-02 20:12:10

标签: php mysqli

这可能有点奇怪......但我需要找出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个条件,如果一切正常则转到下一个"查询",但是,我怎么知道其中一个条件失败了?...如果[v]是什么不匹配,或者如果电子邮件不匹配或者ve不匹配......那样我就可以在MS 2上显示正确的消息....而不是一般消息...
如果v不等于$ k,则$ mss ='您的密钥不匹配';
如果电子邮件不等于$ ema,那么$ mss ='您的电子邮件不是资金';
如果ve不等于0,那么$ mss ='你的密钥没有价值';

问题是我希望尽可能保持简短和干净,我可以对每个条件进行单独查询,这是一种懒惰的方式,但有效...

1 个答案:

答案 0 :(得分:0)

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

  1. 将查询更改为使用OR选择行。返回可能的行集。
  2. {{paths.root}}/../

    1. 现在浏览此结果集以检查条件。
    2. Pseduocode

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

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

      您必须弄清楚如何处理多行,理想情况下,架构会阻止这一行。