从table1中的外键获取table2信息

时间:2015-05-07 01:48:55

标签: php mysql mysqli

什么查询可以获得table1&的完整数据? table2使用table1有的外键吗?

我进入了table1

用户名 密码 person_id(外键)

在表2中

ID 名称 姓 地址

我需要像

这样的查询
SELECT
    pm.column1 AS pm_column1,
    pm.column2 AS pm_column2,
    ....
    p.*
FROM
    ...

(这是我不知道的部分)〜我知道这是一个非常不安全的查询

很抱歉noob问题,我使用mysqli函数和东西

2 个答案:

答案 0 :(得分:0)

您要找的是JOIN,特别是INNER JOINJOIN的作用是根据某些条件将记录从一个表匹配到另一个表。所以你想要的是

    SELECT 
        * 
    FROM 
        table1
        INNER JOIN table2 ON table1.person_id = table2.id
    WHERE 
        table1.username='$var' 
        AND table1.password = '$var';

请查看this网站,了解有关加入的说明。

答案 1 :(得分:0)

您正在将过多的PHP与SQL混合,并且您的查询使用过时的语法进行连接

您希望查询看起来更像这样

"SELECT * 
FROM table1, table2 
JOIN table2 ON table1.person_id = table2.id
WHERE table1.username='$var' 
AND table1.password = '$var'"

由于你将其标记为mysqli,如果你想将它与mysqli连接一起使用,你可以使用以下内容连接到你的数据库:

$dbc = new mysqli($host, $username, $password, $dbname);
    if  ($dbc->connect_error) {
    die("Connection failed: " . $dbc->connect_error);
}

$query = "SELECT * 
FROM table1, table2 
JOIN table2 ON table1.person_id = table2.id
WHERE table1.username='$var' 
AND table1.password = '$var'";

然后像这样称呼它

$dbc->query($query);

您可以通过POST(来自表单)或GET变量来获取变量。

示例:

$var = $_POST['var'];

其中var是HTML表单中的命名输入字段,例如

<input type="text" name="var" />

当然这只是一个开始。我希望我没有回答太多。

编辑:注意,如果您希望以更安全的方式执行此操作,请使用预准备语句执行相同的查询(使其成为两个变量):

$query = $dbc->("SELECT col1, col2
FROM table1, table2 
JOIN table2 ON table1.person_id = table2.id
WHERE table1.username=? 
AND table1.password = ?");

$query->bind_param("ss",$var1,$var2);
$query->execute();

然后你可以调用select中的项目并将它们绑定到变量中,如下所示:

$query->bind_results($col1, $col2);

然后关闭查询

$query->close();

请注意"ss"中的bind_param指定两个变量都是字符串。如果它是一个整数,请使用i

(当然我还会继续):

要调用那些可以做的变量

while ($query->fetch()) {
    echo $col1;
    echo $col2;

}

但我离题了......