如何使用会话ID从php mysql中的两个或多个表中获取值
Posted
技术标签:
【中文标题】如何使用会话ID从php mysql中的两个或多个表中获取值【英文标题】:how to get values form two or more table in php mysql using session id 【发布时间】:2016-11-02 20:43:06 【问题描述】:我创建了 2 个表,学生和班级。而且我还使用 stud_id 作为类表中的外键.... 我如何使用 stud_id 获取两个表的值????我也在会话中使用 stud_id....
<?php
$id=$_SESSION["Stud_id"];
$query = mysql_query ("SELECT * FROM student where Stud_id='$id'");
if (!$query)
die('Invalid query: ' . mysql_error());
while($row = mysql_fetch_assoc($query))
echo "<tr><td> Student ID:</td><td> " . $row["Stud_id"]. "</td></tr>";
echo "<tr><td> Student Name:</td><td> " . $row["Stud_name"]. "</td> </tr>";
echo "<tr><td> Password:</td><td> " . $row["password"]. "</td></tr>";
echo "<tr><td> Father:</td><td> " . $row["Stud_father"]. "</td></tr>";
echo "<tr><td> Date Of Birth:</td><td> " . $row["Stud_dob"]. "</td> </tr>";
echo "<tr><td> Address:</td><td> " . $row["Stud_address"]. "</td></tr>";
echo "<tr><td> Gender:</td><td> " . $row["Stud_gender"]. "</td></tr>";
echo "<tr><td> Phone No:</td><td> " . $row["Stud_phone"]. "</td></tr>";
echo "<tr><td> Class</td><td> " . $row["Stud_class"]. "</td></tr>";
?>
【问题讨论】:
dev.mysql.com/doc/refman/5.7/en/join.html How can an SQL query return data from multiple tables的可能重复 警告:如果您只是学习 PHP,请不要使用mysql_query
接口。它是如此可怕和危险,以至于在 PHP 7 中被删除。像 PDO is not hard to learn 这样的替代品和像 PHP The Right Way 这样的指南解释了最佳实践。您的用户参数不是properly escaped,有SQL injection bugs可以被利用。
【参考方案1】:
您可以使用以下查询来获取结果
<?php
$id=$_SESSION["Stud_id"];
$query = mysql_query ("select s.*,c.* from student s join class c on s.Stud_id=c.Stud_id where s.Stud_id = '$id'");
if (!$query)
die('Invalid query: ' . mysql_error());
while($row = mysql_fetch_assoc($query))
echo "<tr><td> Student ID:</td><td> " . $row["s.Stud_id"]. "</td></tr>";
echo "<tr><td> Student Name:</td><td> " . $row["s.Stud_name"]. "</td> </tr>";
echo "<tr><td> Password:</td><td> " . $row["s.password"]. "</td></tr>";
echo "<tr><td> Father:</td><td> " . $row["s.Stud_father"]. "</td></tr>";
echo "<tr><td> Date Of Birth:</td><td> " . $row["s.Stud_dob"]. "</td> </tr>";
echo "<tr><td> Address:</td><td> " . $row["s.Stud_address"]. "</td></tr>";
echo "<tr><td> Gender:</td><td> " . $row["s.Stud_gender"]. "</td></tr>";
echo "<tr><td> Phone No:</td><td> " . $row["s.Stud_phone"]. "</td></tr>";
echo "<tr><td> Class</td><td> " . $row["s.Stud_class"]. "</td></tr>";
?>
编辑 您可能需要更改上面的列名
【讨论】:
这将有效地执行交叉连接,这似乎并不理想。我认为您的查询可以使用ON
语句。见Can I use mysql JOIN without ON condition?。【参考方案2】:
加入表格。所以代替这种结构:
SELECT *
FROM student
WHERE ...
你会有这样的结构:
SELECT *
FROM student
INNER JOIN class ON student.stud_id = class.stud_id
WHERE ...
这将为您提供两个表的乘积,其中包含两个表的所有列。
请注意,我明确省略了 WHERE
子句,以便在答案中不包含 SQL injection 漏洞。你肯定会想看看mysqli
和PDO
以及他们对prepared statements with query parameters 的使用。 (这比听起来简单。)目前,您的代码对 Internet 上最常见的漏洞开放。
【讨论】:
以上是关于如何使用会话ID从php mysql中的两个或多个表中获取值的主要内容,如果未能解决你的问题,请参考以下文章