如何在选择查询中获取2个表中的列值?

时间:2015-03-22 03:16:55

标签: php mysql

所以我有两个名为tbl_admin和tbl_users的表。它们中的每一个都有一个名为acct_type的列。 tbl_admin中的所有acct_type值都是1,而tbl_users中的所有值都是0.我知道如果我刚刚为它们创建了一个表,那对我来说很容易。我的问题是,如何查询,以便我可以将管理员重定向到其页面,将用户重定向到其页面。

这是我的代码

$uname = $_POST['txt_un'];
$pword = sha1($_POST['txt_pw']);

$query = "SELECT * FROM tbl_admin WHERE uname=? AND pword=?";


$stmt = $dbc->prepare($query);
$stmt->bindParam(1, $uname);
$stmt->bindParam(2, $pword);
$stmt->execute();

$row = $stmt->fetch(PDO::FETCH_ASSOC);

if ($row > 0) {
    if ($row['acct_type'] == 1) {
        header("Location: adminpage.php");
    } elseif ($row['acct_type'] == 0) {
        header("Location: userspage.php");
    }
} else {
    echo "<script>alert('Incorrect username/password');location.href='../index.php'</script>";
}

我知道它不起作用,因为我只是从tbl_admin查询select。非常感谢您的帮助,谢谢!

2 个答案:

答案 0 :(得分:0)

假设您的表(tbl_admin,tbl_users)具有相同的列数 并且这两个表中的每个用户条目都是唯一的。 &#34;如果不是,你将来会遇到一些严重的问题。&#34;

$uname = $_POST['txt_un'];
$pword = sha1($_POST['txt_pw']);

$query = "SELECT * FROM tbl_admin WHERE uname=? AND pword=? UNION SELECT * FROM tbl_users WHERE uname=? AND pword=?";


$stmt = $dbc->prepare($query);
$stmt->bindParam(1, $uname);
$stmt->bindParam(2, $pword);
$stmt->bindParam(3, $uname);
$stmt->bindParam(4, $pword);
$stmt->execute();

$row = $stmt->fetch(PDO::FETCH_ASSOC);

if ($row > 0) {
if ($row['acct_type'] == 1) {
    header("Location: adminpage.php");
} elseif ($row['acct_type'] == 0) {
    header("Location: userspage.php");
}
} else {
echo "<script>alert('Incorrect username/password');location.href='../index.php'</script>";
}

有关UNION的其他信息,请查看:http://dev.mysql.com/doc/refman/5.0/en/union.html

编辑:正如半疯狂所建议的那样,只有每个用户在两个表中都是唯一的时才应该采用这种方法。如果您有额外的时间,则应修改提取用户的方式

答案 1 :(得分:0)

感谢您在此查询中帮助我。非常感谢您的回答。我已经想到,我会为管理员和用户制作不同的登录表单。