繁体   English   中英

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

[英]How to get column values in 2 tables in a select query?

所以我有2个名为tbl_admin和tbl_users的表。 它们每个都有一个名为acct_type的列。 tbl_admin中的所有acct_type值均为1,tbl_users中的所有acct_type值为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。 非常感谢您的帮助,谢谢!

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

$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

编辑:正如Half Crazed建议的那样,仅当每个用户在两个表中都是唯一的时,才应执行此方法。 如果您有更多时间,则应该修改获取用户的方式

感谢您在此查询中对我的帮助。 非常感谢您的回答。 我已经发现,出于某些目的,我将为管理员和用户创建不同的登录表单。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM