0

我对 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();  
4

1 回答 1

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.

于 2012-12-21T02:53:18.883 回答