gpt4 book ai didi

php - 使用事务从多个表中获取数据

转载 作者:行者123 更新时间:2023-11-29 22:00:50 28 4
gpt4 key购买 nike

我有 2 个 MySQL 表:

  • 候选人:uniqid、年龄、性别等
  • 职位:candidate_uniqid、application_date、contacted_by 等。

我想为每个候选人建立一个个人资料,显示候选人和职位表中的信息。。每个候选人可以有多个职位条目。

这就是我正在做的事情:

<?php
if (isset($_GET['uniqid'])) {
$uniqid = $_GET['uniqid'];
}
$queryCandidate = "SELECT * FROM candidate WHERE uniqid = '{$uniqid}'";
$queryJob = "SELECT * FROM job WHERE candidate_uniqid = '{$uniqid}'";

mysqli_begin_transaction($conn, MYSQLI_TRANS_START_READ_ONLY);
$resultCandidate = mysqli_query($conn, $queryCandidate);
$resultJob = mysqli_query($conn, $queryJob);
mysqli_commit($conn);

$rowCandidate = mysqli_fetch_assoc($resultCandidate);

while($rowJob = mysqli_fetch_assoc($resultJob)){
// echo $rowJob['some_value'] . '<br>';
// display data from job table until there is nothing left to fetch
}

// display data from candidate table
//echo $rowCandidate['candidate_name'] . '<br>';
//echo $rowCandidate['phone'] . '<br>';
?>

我的问题是:

  1. 我是否正确使用了 MySQL 事务?
  2. 我正在根据从 $_GET['uniqid'] 获取的变量获取数据。这样做时我应该注意哪些安全措施?

非常感谢!

最佳答案

您应该使用 SQL INNER JOIN 执行此操作:

SELECT c.* , j.* FROM candidate AS c
INNER JOIN job AS j ON c.uniqid = j.candidate_uniqid
WHERE uniqid = @u

INNER JOIN 是一个关键字,它基于每个表中具有相同值的一个(或多个)列来连接 2 个表,并显示所有可能的组合。

这是使用 INNER JOIN 的可能结果:

example of an table got with the inner join

您可能已经注意到,我还添加了 @u 而不是 $uniqid。这是我正在使用的一种保护,它就像 SQL 中的变量,必须在主查询之前在其中一个查询中设置。完整代码如下:

if (isset($_GET['uniqid'])) {

//if the uniqid is a number, use these two lines
$uniqid = intval($_GET['uniqid']);
mysqli_query($conn,"set @u = $uniqid");

//else, if the uniqid is a string, use these two lines
$uniqid = mysqli_real_escape_string($conn,$_GET['uniqid']);
mysqli_query($conn,"set @u = '$uniqid'");

$query = "SELECT c.* , j.* FROM candidate AS c
INNER JOIN job AS j ON c.uniqid = j.candidate_uniqid
WHERE uniqid = @u";
$result = mysqli_query($conn, $query);

while($row = mysqli_fetch_assoc($result)){


}

}

如果您(或其他任何人)需要进一步的解释,请询问!

关于php - 使用事务从多个表中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32668803/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com