0

我创建了一个包含 2 个表(学生、教师)的数据库。每个有 1 行。所以我有一个学生和一个老师。它们都有 id=1 因为在每个表中我都有一个名为 id 的列,它是 Auto Increment。

我做了一个登录页面,我使用了这些:

$sth_username = $dbh->prepare("SELECT name, id FROM students WHERE name = :name UNION SELECT name, id FROM teachers WHERE name = :name");
$sth_username->bindParam(":name", $name);
$sth_password = $dbh->prepare("SELECT password, salt FROM students WHERE name = :name UNION SELECT password, salt FROM teachers WHERE name = :name");
$sth_password->bindParam(":name", $name);

我能够登录并重定向到 index.php。在 index.php 里面我有这个

if (isset($_SESSION['id'])) {
    $sth = $dbh->prepare("SELECT * FROM students WHERE id = :id");
    $sth->bindParam(":id", $_SESSION['id']);
    $sth->execute();
    $result = $sth->fetch(PDO::FETCH_ASSOC);
    print "Name: ".$result['name']."<br>";
    print "Nickname: ".$result['nickname']."<br>";
    print "Town: ".$result['town']."<br>";
    print "Adress: ".$result['adress']."<br>";
    print "E-Mail: ".$result['email']."<br>";

如果我以学生身份登录,它会向我显示这些信息名称昵称等...我想以教师身份登录并查看教师行中的这些统计信息。(教师)姓名、(教师)昵称等......我不知道在里面写什么$sth = $dbh->prepare("SELECT * FROM students WHERE id = :id");才能使它起作用。我尝试了 UNION 和 INNER JOIN 但它不能正常工作。我相信这是一件简单的事情,如果你能帮助我,我会很高兴。

谢谢你,对不起我的英语。

4

1 回答 1

0

正如我在评论中提到的,如果两个表中的列不相同或计数不同,UNION 将失败。你可以做的是找出用户在哪个表中,将它保存在会话中,然后在你的第二个查询中使用它作为表名:

登录页面:

$sth_username = $dbh->prepare("SELECT name, id, 'students' AS role FROM students WHERE name = :name UNION SELECT name, id, 'teachers' AS role FROM teachers WHERE name = :name");

$_SESSION['role_table'] = $row['role']; // or whatever your row result variable is

索引页面:

$sth = $dbh->prepare("SELECT * FROM {$_SESSION['role_table']} WHERE id = :id");
于 2013-10-10T14:56:48.107 回答