【问题标题】:PHP & MySQL - If content is not in one table, check anotherPHP & MySQL - 如果内容不在一个表中,请检查另一个表
【发布时间】:2018-06-15 12:01:19
【问题描述】:

我正在尝试设置 if/else 情况以查看值是否在一个表中,然后显示所述值,如果不在一个表中,则检查另一个表。

我在 Cloud 9 中使用 PHP 和 MySQL。电子邮件是从未显示的表单中获取的。

使用正确的电子邮件搜索“客户”表会显示 password_enc,但如果在客户表中未找到该电子邮件,并且搜索“公司”表,则不会显示任何内容。我检查了 PHPMyAdmin 并且电子邮件存在且有效

我也检查了我的表格,“email”和“rep_email”是有效的。

有没有更简单的方法可以做到这一点,或者我当前的代码是否需要调整?感谢您的帮助。

$email              = !empty($_POST ['email']) ? $_POST['email'] : "";
$email2             = $email;


$query  = "SELECT * FROM Customer WHERE email = '$email'";
$result = $db->query($query);

if ($result){
    $row            = $result->fetch_assoc(); /* These lines query the dataabse when user enters email */
    $password_enc   = $row['password_enc'];
}
elseif(!$result){
    $query2         = "SELECT * FROM Company WHERE rep_email = '$email2'";
    $result2        = $db->query($query2);
    $row2           = $result2->fetch_assoc(); /* These lines query the dataabse when user enters email */
    $password_enc   = $row2['password_enc'];
}

echo "password_enc: ".$password_enc;

【问题讨论】:

  • 我正在阻止 SQL 注入。我只是没有包括它,因为它超出了问题的范围。
  • if ($result){} elseif(!$result){} 这很聪明。告诉我们,为什么要检查elseif
  • 您不检查$result2 - 如果$query2 失败怎么办?如果电子邮件不在Company 表中怎么办?你使用调试器吗?
  • 我想说,在您的数据模型级别上解决这个问题。如果客户和公司都应该拥有可以登录的帐户 - 那么为什么不将与 that 相关的信息放在 account 表中呢?此时无需再搜索两个表。 (客户和公司之间不同的其他信息/字段仍应分别放入各自的专用表中。)

标签: php mysql cloud9


【解决方案1】:

您应该使用num_rows 从结果集中检索行数。

$email              = !empty($_POST ['email']) ? $_POST['email'] : "";
$email2             = $email;


$query  = "SELECT * FROM Customer WHERE email = '$email'";
$result = $db->query($query);

if ($result->num_rows > 0){ //check if results is bigger then 0 
    $row            = $result->fetch_assoc(); /* These lines query the dataabse when user enters email */
    $password_enc   = $row['password_enc'];
} else {
    $query2         = "SELECT * FROM Company WHERE rep_email = '$email2'";
    $result2        = $db->query($query2);
    $row2           = $result2->fetch_assoc(); /* These lines query the dataabse when user enters email */
    $password_enc   = $row2['password_enc'];
}

echo "password_enc: ".$password_enc;

【讨论】:

    【解决方案2】:

    对于成功的 SELECT、SHOW、DESCRIBE 或 EXPLAIN 查询,mysqli_query() 将返回一个 mysqli_result 对象

    Php mysqli Manual

    因此,您实际上可以像这样检查返回的行数,而不是检查响应

    $query  = "SELECT * FROM Customer WHERE email = '$email'";
    $result = $db->query($query);
    
    if ($result->num_rows > 0){
       $row            = $result->fetch_assoc(); /* These lines query the dataabse when user enters email */
       $password_enc   = $row['password_enc'];
    }else{
       $query2         = "SELECT * FROM Company WHERE rep_email = '$email2'";
       $result2        = $db->query($query2);
       if($result2->num_rows>0){
          $row2           = $result2->fetch_assoc(); /* These lines query the dataabse when user enters email */
          $password_enc   = $row2['password_enc'];
       }
    }
    
    if(isset($password_enc)){
       echo "password_enc: ".$password_enc;
    }else{
       echo "Password Not Available";
    }
    

    【讨论】:

    • 我不确定 $result 是如何工作的。我确实查了手册,但我发现它太混乱了。感谢您的帮助
    【解决方案3】:
    $email = !empty($_POST ['email']) ? $_POST['email'] : "";
    
    $query = "SELECT result.* FROM( SELECT IFNULL((SELECT password_enc FROM Customer WHERE email = '$email'), (SELECT password_enc FROM Company WHERE rep_email = '$email')) as password_enc) as result";
    
    $result = $db->query($query);
    $password_enc = '';
    
    if ($result->num_rows > 0){
        $row            = $result->fetch_assoc();
        $password_enc   = $row['password_enc'];
    }
    
    echo "password_enc: ".$password_enc;
    

    【讨论】:

      猜你喜欢
      • 2012-06-22
      • 2016-03-09
      • 1970-01-01
      • 1970-01-01
      • 2021-09-22
      • 2018-09-25
      • 1970-01-01
      • 2012-12-05
      • 1970-01-01
      相关资源
      最近更新 更多