尝试从多个表中选择信息时,遇到mysqli prepared语句的问题

时间:2012-12-21 02:38:58

标签: php mysqli

我是MySQLi的新手并准备好了陈述。最近一直在关注很多教程,以了解它们是如何工作的,但仍然无法弄明白这一点。当新用户尝试注册时,我想检查数据库中是否已存在用户名和电子邮件。以下代码在我对1表进行检查时有效,但在我尝试检查多个表中的现有条目时却没有。我已尝试加入和交叉加入条款以及联合和联合所有。 Dreamweaver没有显示语法错误,但必须在某处出现代码问题。我想知道在加入表之前是否必须在phpmyadmin中设置表之间的关系,但我不认为这会导致问题。

// check if the email is taken
    $check = $mysqli->prepare("SELECT email FROM parents JOIN leaders WHERE parents.email = ? OR leaders.email = ?"); 
    $check->bind_param("s", $input['email']);
    $check->execute();
    $check->store_result();  

1 个答案:

答案 0 :(得分:0)

好的,假设您有3个具有相同结构的表,您希望在一个查询中将UNION表放在一起,WHERE子句中有一个条件。

// UNION query to combine all three tables.
// The union is wrapped in a subquery to apply the single WHERE clause
// to the whole thing...
$sql = "
  SELECT email FROM (
    SELECT email FROM parents
    UNION SELECT email FROM leaders
    UNION SELECT email FROM guides
  ) combined
  WHERE email = ?";

if ($check = mysqli->prepare($sql)) {
  // Bind one input param
  $check->bind_param("s", $input['email']);
  $check->execute();
  $check->store_result();
  // Then fetch your row however you had planned to do so...
}

关于表结构的注意事项:

通常不建议多个表具有相同的结构。这里不是3个不同的表,而是应该有一个表合并所有表的表,并且有一个列将类型标识为leader,guide,parent